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) 是需要塞兩個不同的陣列,例如:
- $search = ['iphone', 'ipad', 'imac', 'airpods'];
- $replace = ['iPhone', 'iPad', 'iMac', 'AirPods'];
- str_ireplace($search, $replace, $source)
所以想要用剛剛原始的 $replace_mapping 來做,會寫成下述:
- $search = array_keys($eplace_mapping);
- $replace = array_values($eplace_mapping);
- 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 ?>