看看有沒有更好的法子

來源:互聯網
上載者:User
剛在技術群看到一條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 次
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.