@Shimpanze

Почему «array_walk_recursive» не срабатывает в данном случае?

Здравствуйте!

Объясните, почему функция "array_walk_recursive" не может определить, что значение текущего ключа, является массивом?

Пример:

$test = array(
    'q' => 'foo',
    'w' => array(
        'phone' => array (
            '111',
            '222',
            'leo' => array ( '333', '444' ),
        ),
    ),
    'e' => 'bar'
);

array_walk_recursive( $test, function( $v, $k ) {
    if ( is_array( $v ) ) print "да - значение этого ключа - массив\n";
    else print "нет - значение этого ключа - не массив\n";
});


Песочница

Спасибо!
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
smilingcheater
@smilingcheater
Эм, ну как бы потому, что это array_walk_recursive.
Если она встречает массив как значение текущего ключа - она в него заходит и начинает применять коллбек на скалярные элементы в нём.
---
Итоговый вариант ответа: написать собственную рекурсивную функцию для обхода массива. Например вот так:
function recursiveProcess($array) {
    foreach ($array as $key => $value) {
        if ($key == 'car' && is_array($value) && isset($value['color'])) {
            // Нашли!
        }
        
        if (is_array($value)) {
            // Встретили массив - заходим в него
            recursiveProcess($value);
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы