У меня есть метод MyClass#foo(array $array, $argX, $argY, $argZ)
и хочу применить его к каждому элементу $myArray
,
Я пробовал это с array_map(...)
а также array_walk(...)
, но они недостаточно гибки для функции с пользовательской подписью.
Как применить метод с несколькими аргументами к каждому элементу массива в PHP (без итерации с циклом)?
Вы можете использовать анонимная функция (возможно в сочетании с use
ключевое слово для доступа к переменным $ arg *):
array_map(function($item) use ($argX, $argY, $argZ) {
return MyClass::foo($item, $argX, $argY, $argZ);
}, $your_array_here);
Если вы используете PHP 5.3+, вы можете передать анонимную функцию (или замыкание) в качестве параметра обратного вызова array_map
,
$newArray = array_map(function($val){
// Whatever code you want using `$val`.
// Make sure to `return` a value, though.
}, $myArray);
Если вы хотите использовать Другой переменные внутри анонимной функции, то вы можете использовать use
Ключевое слово, чтобы захватить их.
$newArray = array_map(function($val) use($argX, $argY, $argZ){
// Whatever code you want using `$val`,
// and also `$argX`, `$argY`, `$argZ`.
// Make sure to `return` a value, though.
}, $myArray);