php逐个汉字遍历字符串

发布于 2022-08-29 17:25:26 字数 217 浏览 24 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独孤求败 2022-09-05 17:25:26
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] => 国
)
流殇 2022-09-05 17:25:26

谢邀!

    $str = '中华人民abc共和\x01国';
    
    preg_match_all('/[\x{4e00}-\x{9fa5}]/u', $str, $chinese);
    preg_match_all('/[^\x{4e00}-\x{9fa5}]/u', $str, $string);
    
    $result = array_merge(current($chinese), current($string));
    
    var_dump($result);die;
悍妇囚夫 2022-09-05 17:25:26

//UTF8算法,其它编码自行转换


$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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文