如何使用 PHP 计算包含 utf8 字符的字符串中的阿拉伯数字


How count Arabic numerals in a string containing utf8 character with PHP?

我有这个功能:

 function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
       $ret = array();
       $len = mb_strlen($str, "UTF-8");
       for ($i = 0; $i < $len; $i += $l) {
           $ret[] = mb_substr($str, $i, $l, "UTF-8");
       }
       return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}

当我像这样执行时:

$arr = str_split_unicode('你好,我将于2014年11月11日变成霸王龙,这非常的好看呢!一二三四五六七八九!', 21);
echo '<pre>';print_r($arr); 

结果是:

Array
(
    [0] => 你好,我将于2014年11月11日变成霸王
    [1] => 龙,这非常的好看呢!一二三四五六七八九!
)

这不是我想要的。因为阿拉伯数字算作 1 比 1,我希望将 2 个阿拉伯数字算为 1,我怎么能做到这一点?

我在这里冒昧地猜测你实际上是在尝试实现一个统一的块布局,其中所有字符都排列成列。为此,您应该使用全角数字("zen-kaku"),而不是尝试将它们与 2 对 1 对齐:

echo mb_convert_kana('你好,我将于2014年11月11日变成霸王龙...', 'AS', 'UTF-8');

http://php.net/mb_convert_kana

我假设你想要字符串中的数字数量这就是答案吗?

$str = '你好,我将于2014年11月11日变成霸王龙,这非常的好看呢!一二三四五六七八九!';
preg_match_all("/'d+/", $str, $output_array);
echo count($output_array[0]); //number of digits in a string. in this case 3