有多個字串想要依序做刪除或取代,但是可能會遇到一些問題,如下案例:
$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()
- {
- }
- function get_filter_word()
- {
- $filter = ['多少', '多少錢', '價格', '價錢'];
- usort($filter, 'array_sort_by_length'); // 會轉換成 ['多少錢', '多少', '價格', '價錢']
- return $filter;
- }
- ?>
於是原始程式可改寫成:
- <?php
- $string = '蘋果多少錢';
- $filter = get_filter_word();
- echo str_replace($filter, '', $string); // 蘋果
- ?>
出來的答案就是想要的結果囉~