我目前正在使用array_map
将回调应用于数组元素。但我希望能够像array_walk
那样将参数传递给回调函数。
我想我可以使用array_walk
,但是如果你使用array_map
,我需要返回值为数组,而不是TRUE或FALSE。
那么可以使用array_map
并将参数传递给回调函数吗?或者也许让array_walk
返回一个数组而不是布尔值?
答案 0 :(得分:6)
您不需要它来返回数组。
而不是:
$newArray = array_function_you_are_looking_for($oldArray, $funcName);
这是:
$newArray = $oldArray;
array_walk($newArray, $funcName);
答案 1 :(得分:6)
如果你想要返回值是一个数组,只需使用array_map。要向array_map添加其他参数,请使用“use”,例如:
array_map(function($v) use ($tmp) { return $v * $tmp; }, $array);
或
array_map(function($v) use ($a, $b) { return $a * $b; }, $array);
答案 2 :(得分:2)
根据您需要传递的参数类型,您可以创建一个包装函数:
$arr = array(2, 4, 6, 8);
function mapper($val, $constant) {
return $val * $constant;
}
$constant = 3;
function wrapper($val) {
return mapper($val, $GLOBALS['constant']);
}
$arr = array_map('wrapper', $arr);
这实际上似乎太简单了。我怀疑我们需要更多的背景才能真正提供帮助。
答案 3 :(得分:0)
要扩大Hieu的优秀答案,您还可以使用$ key =>原始数组的$ value对。这是一个例子,其中一些代码来自评论部分http://php.net/manual/en/function.array-map.php
以下内容将使用“使用”并包含一个新数组的附加参数。
下面的代码会抓取“ b_value ”和“ d_value ”并放入新数组$ new_arr (无用的例子来说明一点)
// original array
$arr = ("a" => "b_value",
"c" => "d_value");
// new array
$new_arr = array();
array_map(function($k,$v) use (&$new_arr) { $new_arr[] = $v;}, array_keys($arr), $arr);
^ $ k是关键,$ v是值
$ new_arr的print_r是Array
(
[0] => b_value
[1] => d_value
)