2011-06-03 35 views
20

是否可以使用array_mapstr_replace一起使用,而無需調用另一個函數來執行str_replacearray_map with str_replace

例如:
array_map(str_replace(' ', '-', XXXXX), $myArr);

+1

你想做什麼?將'str_replace()'映射到一個數組,或者將某個東西替換爲函數名的結果映射到數組? – BoltClock 2011-06-03 11:36:17

+0

你爲什麼不試試呢? :) – 2011-06-03 11:38:47

+0

陣列的每個元素都有str_replace – Lizard 2011-06-03 11:38:52

回答

46

沒有必要array_map。從docs:「如果subject是一個數組,那麼搜索和替換是對主題的每個條目執行的,並且返回值也是一個數組。」

+0

完美答案! +1 – binaryLV 2011-06-03 11:51:28

8

不,這是不可能的。不過,如果你使用的是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 
) 
+1

哎呀..永遠不要說永遠:) – mkilmanas 2011-06-03 12:01:09

+0

@mkilmanas,你是什麼意思?降低投票的原因是什麼(如果是你的話)? – binaryLV 2011-06-03 13:03:18

4

確定這是可能的,你只需要給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); 
1

可能需要注意的是,如果在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; 
}