## Функция MAP_DEEP() в WordPress 4.4.0
Функция map_deep()
применяется для выполнения указанной функции над значениями переданного массива, объекта, строки или числа. Эта функция работает рекурсивно, то есть она может обрабатывать вложенные структуры данных.
Эта функция похожа на array_walk_recursive()
, но также работает и с объектами.
### Использование
Функция используется в таких функциях, как:
- wp_unslash()
- stripslashes_deep()
- urlencode_deep()
Время выполнения:
- 1 раз — 0.000031 сек (очень быстро)
- 50000 раз — 0.17 сек (тоже быстро)
### Возвращаемое значение
Функция возвращает смешанный тип данных (mixed). Она возвращает значение с примененной к нему функции для всех не массивов и не объектов внутри него.
### Синтаксис
```php
map_deep( $value, $callback );
- $value (mixed) (обязательный) — массив, объект или скалярное значение.
- $callback (callable) (обязательный) — функция, которая будет применена к
$value
.
Примеры
Пример 1: Использование функции для всех элементов массива
// Определим обратный вызов
function myint( $val ){
if( $val === 1 ) return 111; // Если значение ра��но 1, возвращаем 111
return (int) $val; // Преобразуем в целое число
}
$val = array( 1, '2 apples', 'and a pear' );
$val = map_deep( $val, 'myint' ); // Применяем функцию
/*
Результат:
Array
(
[0] => 111
[1] => 2
[2] => 0
)
*/
Пример 2: Если вы передаете строку в map_deep()
Если мы заранее знаем, что получим строку, то можем сразу применить функцию к этой строке.
Но если мы не уверены, какого типа значение будет передано, имеет смысл использовать map_deep()
. В этом случае, если функция получит строку, это не повредит — она обработает значение и вернет обработанное значение строки:
// Используем функцию myint() из прошлого примера...
// Обрабатываем строку
$val = '2 apples';
echo map_deep( $val, 'myint' ); //> 2
Код функции map_deep()
Функция map_deep()
выглядит следующим образом:
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;
}
Заключение
Функция map_deep()
полезна для обработки сложных структур данных в WordPress. Она позволяет применить одну и ту же функцию ко всем элементам массивов и свойствам объектов, упрощая работу с данными.