84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
1、怎样将php中出现的中文字符一个一个截取出来,有没有不用mb_substr的方法。2、比如我写一个统计文件中(单个文件超过100万字)中文各字符出现次数的,java中用charAt方法即可遍历字符,程序写下来也就几秒,但是在php中用mb_库十分慢,等了好几分钟都没有结果。3、附java实现的代码 java实现统计字符出现次数
人生最曼妙的风景,竟是内心的淡定与从容!
经测试,我的代码应该是没有问题的,请指正:
$str = file_get_contents("hong.txt"); preg_match_all("/./u", $str, $arr); $store = []; foreach($arr[0] as $value){ if(array_key_exists($value, $store)){ $store[$value]++; }else{ $store[$value] = 1; } } asort($store); var_dump($store);
此段代码在php7环境下对红楼梦进行操作(148万字),总耗时0.464s。
中文字符串分隔
<?php $tempaddtext = "php对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) { 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);
试试这个
<?php $str = "abc中国cn"; $keys = []; for($i = 0, $l = strlen($str); $i < $l; $i++) { $key = ord($str[$i]); if ($key < 192) { $key = $str[$i]; } else if ($key < 224) { $key = $str[$i] . $str[$i+1]; $i ++; } else { $key = $str[$i] . $str[$i+1] . $str[$i+2]; $i += 2; } if (! isset($keys[$key])) { $keys[$key] = 0; } $keys[$key]++; } print_r($keys);
其实楼上的思路也没问题,但是代码效率不太好。我这个测试了一下,貌似有的字符识别不正常,还需要完善,只是给个思路而以。
这里有字符串截取、分割的终极解决方案。点这里,点这里
用拓展理论上是最有效的方案,php代码能实现的一般都是正则来实现,在效率上是比不上拓展的。如果觉得慢回顾下算法。
经测试,我的代码应该是没有问题的,请指正:
此段代码在php7环境下对红楼梦进行操作(148万字),总耗时0.464s。
中文字符串分隔
试试这个
其实楼上的思路也没问题,但是代码效率不太好。我这个测试了一下,貌似有的字符识别不正常,还需要完善,只是给个思路而以。
这里有字符串截取、分割的终极解决方案。
点这里,点这里
用拓展理论上是最有效的方案,php代码能实现的一般都是正则来实现,在效率上是比不上拓展的。如果觉得慢回顾下算法。