26

是否可以在不调用另一个函数的情况下array_map结合使用?str_replacestr_replace

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

4

4 回答 4

63

不需要array_map。来自文档:“如果主题是一个数组,则对主题的每个条目执行搜索和替换,并且返回值也是一个数组。”

于 2011-06-03T11:47:59.993 回答
13

不,这是不可能的。不过,如果您使用的是 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
)
于 2011-06-03T11:38:34.380 回答
8

当然有可能,您只需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);
于 2011-06-03T11:59:14.373 回答
1

可能需要注意的是,如果正在使用的数组str_replace是多维的,str_replace则将不起作用。

虽然这并不能直接回答使用 w/out 调用额外函数的问题,但如果决定您需要在多维数组上使用和字符串替换array_map,则此函数可能仍可用于代替str_replacein的第一个参数。它的行为与使用相同:array_maparray_mapstr_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;
}
于 2012-09-19T20:31:37.840 回答