开发者

array_walk or array_map?

I'm currently using array_map to apply callbacks to elements of an array. But I want to be able to pass an argument to the callback function like array_walk does. I suppose I could just use array_walk, but I need the return value to be an array like if you use array_map, not TRUE or FALSE.

So is it possible to use array_map and pass an argumen开发者_StackOverflow中文版t to the callback function? Or perhaps make the array_walk return an array instead of boolean?


You don't need it to return an array.

Instead of:

$newArray = array_function_you_are_looking_for($oldArray, $funcName);

It's:

$newArray = $oldArray;
array_walk($newArray, $funcName);


If you want return value is an array, just use array_map. To add additional parameters to array_map use "use", ex:

array_map(function($v) use ($tmp) { return $v * $tmp; }, $array);

or

array_map(function($v) use ($a, $b) { return $a * $b; }, $array);


Depending on what kind of arguments you need to pass, you could create a wrapped function:

$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);

This actually seems too simple to be true. I suspect we'll need more context to really be able to help.


To expand a bit on Hieu's great answer, you can also use the $key => $value pairs of the original array. Here's an example with some code borrowed from comment section http://php.net/manual/en/function.array-map.php

The following will use 'use' and include an additional parameter which is a new array.

Below code will grab "b_value" and "d_value" and put into a new array $new_arr (useless example to show a point)

// 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 is key and $v is value

print_r of $new_arr is

Array
(
    [0] => b_value
    [1] => d_value
)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜