是否可以使用array_map
與str_replace
一起使用,而無需調用另一個函數來執行str_replace
?array_map with str_replace
例如:
array_map(str_replace(' ', '-', XXXXX), $myArr);
是否可以使用array_map
與str_replace
一起使用,而無需調用另一個函數來執行str_replace
?array_map with str_replace
例如:
array_map(str_replace(' ', '-', XXXXX), $myArr);
不,這是不可能的。不過,如果你使用的是PHP 5.3中,你可以做這樣的事情:
$data = array('foo bar baz');
$data = array_map(function($value) { return str_replace('bar', 'xxx', $value); }, $data);
print_r($data);
輸出:
Array
(
[0] => foo xxx baz
)
確定這是可能的,你只需要給array_map()
回調函數的正確輸入。
array_map(
'str_replace', // callback function (str_replace)
array_fill(0, $num, ' '), // first argument ($search)
array_fill(0, $num, '-'), // second argument ($replace)
$myArr // third argument ($subject)
);
但是對於問題中的特定示例,如chiborg所述,沒有必要。 str_replace()
將愉快地工作在一個字符串數組上。
str_replace(' ', '-', $myArr);
可能需要注意的是,如果在str_replace中使用的數組是多維的,str_replace將不起作用。
雖然這並不直接回答使用array_map w/out調用額外函數的問題,但如果決定需要使用array_map和string,此函數在array_map的第一個參數中可能仍然有用,代替「str_replace」更換多維數組。它的行爲與使用str_replace相同:
function md_str_replace($find, $replace, $array) {
/* Same result as using str_replace on an array, but does so recursively for multi-dimensional arrays */
if (!is_array($array)) {
/* Used ireplace so that searches can be case insensitive */
return str_ireplace($find, $replace, $array);
}
$newArray = array();
foreach ($array as $key => $value) {
$newArray[$key] = md_str_replace($find, $replace, $value);
}
return $newArray;
}
你想做什麼?將'str_replace()'映射到一個數組,或者將某個東西替換爲函數名的結果映射到數組? – BoltClock 2011-06-03 11:36:17
你爲什麼不試試呢? :) – 2011-06-03 11:38:47
陣列的每個元素都有str_replace – Lizard 2011-06-03 11:38:52