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

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

$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); // 蘋果
?>

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

作者: Tsung

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

發表迴響

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