map_deep()WP 4.4.0

Применяет указанную функцию к значениям переданного массива/объекта/строки/числа. Рекурсивная функция.

Аналог array_walk_recursive(), только работает чисто с массивами.

1 раз — 0.000031 сек (очень быстро) | 50000 раз — 0.17 сек (очень быстро)

Хуков нет.

Возвращает

Разное. С обработанными значениями.

Использование

map_deep( $value, $callback );
$value(массив/объект/строка/число) (обязательный)
Массив, объект, строка, число, которые нужно обработать функцией указанной в $callback.
$callback(callable) (обязательный)
Функция которой нужно обработать значения.

Примеры

0

#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
)
*/
0

#2 Если передать строку в map_deep()

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

Но, если мы не знаем заранее что придет, то есть смысл передать полученное значение в map_deep(). В этом случае если функция получит строку, то ничего страшного не произойдет — функция её обработает и вернет обработанное значение полученной строки:

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

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

Список изменений

С версии 4.4.0 Введена.

Код map_deep() WP 6.5.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;
}