array_walk还是array_map?

时间:2011-05-10 16:08:05

标签: php arrays return-value

我目前正在使用array_map将回调应用于数组元素。但我希望能够像array_walk那样将参数传递给回调函数。 我想我可以使用array_walk,但是如果你使用array_map,我需要返回值为数组,而不是TRUE或FALSE。

那么可以使用array_map并将参数传递给回调函数吗?或者也许让array_walk返回一个数组而不是布尔值?

4 个答案:

答案 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
)