map_deep()
Применяет указанную функцию к значениям переданного массива/объекта/строки/числа. Рекурсивная функция.
Аналог array_walk_recursive(), только работает чисто с массивами.
1 раз — 0.000031 сек (очень быстро) | 50000 раз — 0.17 сек (очень быстро)
Хуков нет.
Возвращает
Разное. С обработанными значениями.
Использование
map_deep( $value, $callback );
- $value(массив/объект/строка/число) (обязательный)
- Массив, объект, строка, число, которые нужно обработать функцией указанной в $callback.
- $callback(callable) (обязательный)
- Функция которой нужно обработать значения.
Примеры
#1 Применение функции на всех элементах массива.
// функция очистки
function myint( $val ){
if( $val === 1 )
return 111;
return (int) $val;
}
$val = array( 1, '2 яблока', 'и груша' );
$val = map_deep( $val, 'myint' ); // 111
/*
Array
(
[0] => 111
[1] => 2
[2] => 0
)
*/ #2 Если передать строку в map_deep()
Если мы заранее знаем, что мы получаем строку или другой скаляр, то конечно можно просто применить функцию к строке.
Но, если мы не знаем заранее что придет, то есть смысл передать полученное значение в map_deep(). В этом случае если функция получит строку, то ничего страшного не произойдет — функция её обработает и вернет обработанное значение полученной строки:
// myint() функция из прошлого примера... // обработаем строку $val = '2 яблока'; echo map_deep( $val, 'myint' ); //> 2
Список изменений
| С версии 4.4.0 | Введена. |
Код map_deep() map deep WP 6.8.3
function map_deep( $value, $callback ) {
if ( is_array( $value ) ) {
foreach ( $value as $index => $item ) {
$value[ $index ] = map_deep( $item, $callback );
}
} elseif ( is_object( $value ) ) {
$object_vars = get_object_vars( $value );
foreach ( $object_vars as $property_name => $property_value ) {
$value->$property_name = map_deep( $property_value, $callback );
}
} else {
$value = call_user_func( $callback, $value );
}
return $value;
}