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()

Если мы заранее знаем, что мы получаем строку или другой скаляр, то конечно можно применить функцию напрямую. Но, если мы не знаем заранее что придет и функция получит строку, то ничего страшного не произойдет, и функция её обработает и вернет обработанное значение полученной строки:

// myint() функция из прошлого примера...

// обработаем строку
$val = '2 яблока';
echo map_deep( $val, 'myint' ); // выведет 2

Код из


wp-includes/formatting.php

WP 4.7.2

<?php
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;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *