首页  >  文章  >  后端开发  >  中文分词 - php逐个汉字遍历字符串

中文分词 - php逐个汉字遍历字符串

WBOY
WBOY原创
2016-06-06 20:44:502252浏览

我有个字符串,格式为$str = "中华人民abc共和x01国",如何逐个汉字遍历该字符串呢?即:能够输出“中” “华” “人” “民” “a” ...

我现在使用的方法是:for($i =0 ; $i < len ; $i ) {$sub_str = mb_substr($str, $i, 1)},但这样做效率太低。

请问应该如何提高效率?是否可以讲$str转换为数组?

回复内容:

我有个字符串,格式为$str = "中华人民abc共和x01国",如何逐个汉字遍历该字符串呢?即:能够输出“中” “华” “人” “民” “a” ...

我现在使用的方法是:for($i =0 ; $i < len ; $i ) {$sub_str = mb_substr($str, $i, 1)},但这样做效率太低。

请问应该如何提高效率?是否可以讲$str转换为数组?

<code class="lang-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);
}
$s = '中华人民abc共和\x01国'; 

print_r(str_split_unicode($s));
Array
(
    [0] => 中
    [1] => 华
    [2] => 人
    [3] => 民
    [4] => a
    [5] => b
    [6] => c
    [7] => 共
    [8] => 和
    [9] => \
    [10] => x
    [11] => 0
    [12] => 1
    [13] => 国
)


                            
            </p>
<p class="answer fmt" data-id="1020000000593734">
                                    
</p>
<p>//UTF8算法,其它编码自行转换</p>

<pre class="brush:php;toolbar:false"><code class="lang-php"><br> $cind = 0;
 $arr_cont = array();
 for ($i = 0; $i < strlen($tempaddtext); $i++) {
            if (strlen(substr($tempaddtext, $cind, 1)) > 0) {
                if (ord(substr($tempaddtext, $cind, 1)) < 192) { //如果为英文则取1个字节
                    if (substr($tempaddtext, $cind, 1) != " ") {
                        array_push($arr_cont, substr($tempaddtext, $cind, 1));
                    }
                    $cind++;
                } elseif(ord(substr($tempaddtext, $cind, 1)) < 224) {
                    array_push($arr_cont, substr($tempaddtext, $cind, 2));
                    $cind+=2;
                } else {
                    array_push($arr_cont, substr($tempaddtext, $cind, 3));
                    $cind+=3;
                }
            }
        }

         print_r($arr_cont);
</code>
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn