使用str_replace的array_map函数

26

可以在不调用另一个函数的情况下,将array_mapstr_replace结合使用吗?

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

其中XXXXX需要替换成具体的字符串或字符数组。

1
你想做什么?是将 str_replace() 映射到一个数组,还是将替换结果作为函数名映射到数组中? - BoltClock
1
为什么你不试一下呢? :) - Jon Skarpeteig
将数组的每个元素都进行str_replace替换。 - Lizard
4个回答

64

无需使用array_map。根据文档:“如果subject是一个数组,则对每个subject的条目执行搜索和替换,并且返回值也是一个数组。”


14

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

@mkilmanas,你的意思是什么?如果是你给我点了踩,可以告诉我原因吗? - binaryLV

9
当然可以,你只需要给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的问题,但如果决定需要在多维数组上使用array_map和字符串替换,则此函数仍然可以代替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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接