2014-12-06 52 views
-1

我有這樣的功能:如何計算包含utf8字符的字符串中的阿拉伯數字與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,我怎麼能做到這一點?

+0

如果這是實現統一的塊佈局,反正這是錯誤的。它最終取決於用於呈現數字的字體;即使每個漢字字符使用2個數字,仍然不能保證它們會很好地排列。 – deceze 2014-12-06 10:15:40

回答

0

我的肢體這裏走出去,就會想,你實際上是試圖實現均勻的塊佈局中的所有字符列排隊。爲此,你應該寧願使用全角數字(「禪閣」),而不是試圖與它們對齊2比1:

echo mb_convert_kana('你好,我將於2014年11月11日變成霸王龍...', 'AS', 'UTF-8'); 

http://php.net/mb_convert_kana

0

我想你想要的字符串中的數字的數量 這可能是答案?

$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