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.6.2
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; }