剛在技術群看到一條N個鐘前的問題:
用PHP如何找出在一個字串中出現最多的字元
我的思路是先將字串侵害成數組,通過array_count_values得到元素個數統計,排序,取最頂那個為最多次數,然後可能有多個相同最多次數,for迴圈找出來..
$testStr = 'rewruo ewjrewm' . PHP_EOL . 'hcywer國bg gfaaf d中國國國s國rew';$testStr = preg_replace('/\s/', '', $testStr);preg_match_all('/./u', $testStr, $strList);$charCount = array_count_values($strList[0]);arsort($charCount);$maxCount = current($charCount);foreach($charCount as $char => $count){if($count < $maxCount){break;}echo $char . '出現了 ' . $count . ' 次
';}
回複討論(解決方案)
既然都用 array_count_values ,用 max 求交集就是了,不必迴圈
你都arsort了,直接echo key($charCount); 就是出現最多的字元了。
既然都用 array_count_values ,用 max 求交集就是了,不必迴圈
你都arsort了,直接echo key($charCount); 就是出現最多的字元了。
我迴圈是為了將其他同屬最多次數的字元也輸出來..按照你們的做法只輸出了其中一個而已呢
既然都用 array_count_values ,用 max 求交集就是了,不必迴圈
你都arsort了,直接echo key($charCount); 就是出現最多的字元了。
我迴圈是為了將其他同屬最多次數的字元也輸出來..按照你們的做法只輸出了其中一個而已呢
你沒試過吧?交集啊,array_intersect,先去試一下看看結果~
你沒試過吧?交集啊,array_intersect,先去試一下看看結果~
求代碼,My Code求出結果如下:
r出現了 5 次
w出現了 5 次
國出現了 5 次
e出現了 5 次
因為有4個相同次數並且是最多次數的字元
已經沒有都少簡化的餘地了
$testStr = 'rewruo ewjrewm' . PHP_EOL . 'hcywer國bg gfaaf d中國國國s國rew';$testStr = preg_replace('/\s/', '', $testStr);preg_match_all('/./u', $testStr, $strList);$strList = array_count_values($strList[0]);$r = array_keys($strList, $m = max($strList));echo join($t=" 出現了 $m 次
", $r).$t;r 出現了 5 次
e 出現了 5 次
w 出現了 5 次
國 出現了 5 次