PHP 將 Array 的 Value 依照字元長到短排序

有多個字串想要依序做刪除或取代,但是可能會遇到一些問題,如下案例:

$filter 是不想出現的文字,所以要將 $string 的內容有出現這些文字,都刪除~

  1. <?php
  2. $string = '蘋果多少錢';
  3. $filter = ['多少', '多少錢', '價格', '價錢'];
  4. echo str_replace($filter, '', $string); // 蘋果錢
  5. ?>

這樣子結果會出來「蘋果錢」,而不是預期想要的「蘋果」

要怎麼解決呢?

PHP 將 Array 的 Value 依照字元長到短排序

主要問題出在字串取代的順序問題,只要將 $filter 改成下述即可:

  • $filter = ['多少錢', '多少', '價格', '價錢'];

主要是將陣列內容的字元長度由長到短排序,再來做取代就沒事了~

所以來寫對 陣列 Value 做字元長度排序 的 Function:

  1. <?php
  2. function array_sort_by_length($a, $b) // for usort get_filter_word()
  3. {
  4. return strlen($b) - strlen($a);
  5. }
  6. function get_filter_word()
  7. {
  8. $filter = ['多少', '多少錢', '價格', '價錢'];
  9. usort($filter, 'array_sort_by_length'); // 會轉換成 ['多少錢', '多少', '價格', '價錢']
  10. return $filter;
  11. }
  12. ?>

於是原始程式可改寫成:

  1. <?php
  2. $string = '蘋果多少錢';
  3. $filter = get_filter_word();
  4. echo str_replace($filter, '', $string); // 蘋果
  5. ?>

出來的答案就是想要的結果囉~

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料