Функция MAP_DEEP() в WordPress 4.4.0: синтаксис, примеры, возвращаемое значение

## Функция 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. Она позволяет применить одну и ту же функцию ко всем элементам массивов и свойствам объектов, упрощая работу с данными.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *