有多個字串想要依序做刪除或取代,但是可能會遇到一些問題,如下案例:
$filter 是不想出現的文字,所以要將 $string 的內容有出現這些文字,都刪除~
<?php $string = '蘋果多少錢'; $filter = ['多少', '多少錢', '價格', '價錢']; echo str_replace($filter, '', $string); // 蘋果錢 ?>
這樣子結果會出來「蘋果錢」,而不是預期想要的「蘋果」
要怎麼解決呢?
PHP 將 Array 的 Value 依照字元長到短排序
主要問題出在字串取代的順序問題,只要將 $filter 改成下述即可:
- $filter = ['多少錢', '多少', '價格', '價錢'];
主要是將陣列內容的字元長度由長到短排序,再來做取代就沒事了~
所以來寫對 陣列 Value 做字元長度排序 的 Function:
<?php function array_sort_by_length($a, $b) // for usort get_filter_word() { return strlen($b) - strlen($a); } function get_filter_word() { $filter = ['多少', '多少錢', '價格', '價錢']; usort($filter, 'array_sort_by_length'); // 會轉換成 ['多少錢', '多少', '價格', '價錢'] return $filter; } ?>
於是原始程式可改寫成:
<?php $string = '蘋果多少錢'; $filter = get_filter_word(); echo str_replace($filter, '', $string); // 蘋果 ?>
出來的答案就是想要的結果囉~