Ответ 1
Вам не нужно возвращать массив.
Вместо:
$newArray = array_function_you_are_looking_for($oldArray, $funcName);
Это:
$newArray = $oldArray;
array_walk($newArray, $funcName);
В настоящее время я использую array_map
для применения обратных вызовов к элементам массива. Но я хочу иметь возможность передать аргумент функции обратного вызова, например, array_walk
.
Я полагаю, что я мог бы просто использовать array_walk
, но мне нужно, чтобы возвращаемое значение представляло собой массив, например, если вы используете array_map
, а не TRUE или FALSE.
Так можно ли использовать array_map
и передать аргумент функции обратного вызова? Или, возможно, вернуть array_walk
массив вместо boolean?
Вам не нужно возвращать массив.
Вместо:
$newArray = array_function_you_are_looking_for($oldArray, $funcName);
Это:
$newArray = $oldArray;
array_walk($newArray, $funcName);
Если вы хотите, чтобы возвращаемое значение было массивом, просто используйте 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);
В зависимости от того, какие аргументы вам нужно передать, вы можете создать завернутую функцию:
$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 = > $исходного массива. Вот пример с некоторым кодом, заимствованным из раздела комментариев 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 - значение
print_r из $new_arr
Array
(
[0] => b_value
[1] => d_value
)