我目前正在使用array_map
对数组元素应用回调函数。但是我希望能像array_walk
一样传递参数给回调函数。
我想我可以直接使用array_walk
,但我需要返回值是一个数组,就像使用array_map
时一样,而不是TRUE或FALSE。
所以,是否可能在使用array_map
的同时传递参数给回调函数?或者让array_walk
返回一个数组而不是布尔值?
我目前正在使用array_map
对数组元素应用回调函数。但是我希望能像array_walk
一样传递参数给回调函数。
我想我可以直接使用array_walk
,但我需要返回值是一个数组,就像使用array_map
时一样,而不是TRUE或FALSE。
所以,是否可能在使用array_map
的同时传递参数给回调函数?或者让array_walk
返回一个数组而不是布尔值?
$newArray = array_function_you_are_looking_for($oldArray, $funcName);
It's:
$newArray = $oldArray;
array_walk($newArray, $funcName);
array_walk
,返回值将是TRUE或FALSE。我希望返回值像array_map
一样是一个数组。
因此,要么找到一种使用array_map
传递参数的方法,要么找到一种使array_walk
返回数组而不是布尔值的方法。 - Kemal Fadillaharray_walk
在调用它的原始数组上进行编辑吗?如果是的话,那就太棒了。 - sdleihssirhc$arr = array_walk($newArray, $funcName);
。TRUE只是表示操作成功,并且你可以使用插入的数组。 - Joshua - Pendoarray_walk
,只有在我定义的“walker”函数使用 &
符号时才会修改原始数组:function walker(&$val) { ... }
- sdleihssirhcarray_map(function($v) use ($tmp) { return $v * $tmp; }, $array);
或者
array_map(function($v) use ($a, $b) { return $a * $b; }, $array);
根据需要传递的参数类型,您可以创建一个包装函数:
$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);
为了更详细地解释Hieu的优秀答案,您还可以使用原始数组的$key => $value对。以下是一个示例,其中包含从评论部分http://php.net/manual/en/function.array-map.php借用的一些代码。
以下将使用“use”并包括一个新数组作为附加参数。
下面的代码将获取“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
)