带有str_replace的array_map

时间:2011-06-03 11:34:59

标签: php str-replace array-map

是否可以将array_mapstr_replace结合使用而无需调用其他功能来执行str_replace

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

4 个答案:

答案 0 :(得分:55)

不需要array_map。从docs:“如果subject是一个数组,那么搜索和替换是对主题的每个条目执行的,返回值也是一个数组。”

答案 1 :(得分:11)

不,这是不可能的。但是,如果您使用的是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
)

答案 2 :(得分:5)

当然可以,你只需要为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);

答案 3 :(得分: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;
}