PHP str_replace 陣列的對應技巧

PHP 的 str_replace()str_ireplace() 在使用上,剛開始覺得有些不太直覺的地方,不過,後來發現應該是文件沒有看仔細的因素~

  • 註:str_ireplace() 是不管大小寫,用法都一樣,此篇範例都用 str_ireplace() 來做。

PHP str_replace 陣列的對應技巧

PHP 如果想要將一個字串的英文字字首轉大寫,可以使用 ucwords(),但是會遇到下面產品大寫的位置不同,所以使用 str_replace() 怎麼寫法會比較容易懂呢?

想要將字串做 1 對 1 的 Mapping 轉換,最好的方式是一個一對一的陣列,例如:

$replace_mapping = [
    'iphone'  => 'iPhone',
    'ipad'    => 'iPad',
    'imac'    => 'iMac',
    'airpods' => 'AirPods',
];

但是 str_ireplace($find, $replace, $source) 是需要塞兩個不同的陣列,例如:

  1. $search = ['iphone', 'ipad', 'imac', 'airpods'];
  2. $replace = ['iPhone', 'iPad', 'iMac', 'AirPods'];
  3. str_ireplace($search, $replace, $source)

所以想要用剛剛原始的 $replace_mapping 來做,會寫成下述:

  1. $search = array_keys($eplace_mapping);
  2. $replace = array_values($eplace_mapping);
  3. str_ireplace($search, $replace, $source)

這種寫法是可以用,但是總覺得用 values 這個比較慢,而且做法有點蠢~

再仔細看文件說明,發現說明是這樣說的:

  • search
    • The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles.
  • replace
    • The replacement value that replaces found search values. An array may be used to designate multiple replacements.
  • 註:replace 那個會取用 search 的 values

於是一樣 Array mapping,但是完整寫法如下:

<?php
$replace_mapping = [
    'iphone'  => 'iPhone',
    'ipad'    => 'iPad',
    'imac'    => 'iMac',
    'airpods' => 'AirPods',
];
echo str_ireplace(array_keys($replace_mapping), $replace_mapping, 'anbc iphone samsung ipad asamsungaaa IPHONE aa');
// output: anbc iPhone samsung iPad asamsungaaa iPhone aa
?>

作者: Tsung

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

發表迴響

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