1、怎樣將php中出現的中文字元一個一個截取出來,有沒有不用mb_substr的方法。
2、比如我寫一個統計檔案中(單個檔案超過100萬字)中文各字元出現次數的,java中用charAt方法即可遍曆字元,程式寫下來也就幾秒,但是在php中用mb_庫十分慢,等了好幾分鐘都沒有結果。
3、附java實現的代碼 java實現統計字元出現次數
回複內容:
1、怎樣將php中出現的中文字元一個一個截取出來,有沒有不用mb_substr的方法。
2、比如我寫一個統計檔案中(單個檔案超過100萬字)中文各字元出現次數的,java中用charAt方法即可遍曆字元,程式寫下來也就幾秒,但是在php中用mb_庫十分慢,等了好幾分鐘都沒有結果。
3、附java實現的代碼 java實現統計字元出現次數
經測試,My Code應該是沒有問題的,請指正:
$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。
中文字串分隔
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代碼能實現的一般都是正則來實現,在效率上是比不上拓展的。如果覺得慢回顧下演算法。