Как проверить, содержит ли многомерный массив определенную пару ключ-значение на всех «уровнях»?

1

У меня этот многомерный массив:

$arr = array(
    array(
        array(
            'page_id'    => '75',
            'book_color' => 'red',
            'book_name'  => 'Bible - patch nr. 593',
        ),
    ),
    array(
        array(
            array(
                'page_id'    => '85',
                'book_color' => 'blue',
                'book_name'  => 'Bible',
            ),
            array(
                'page_id'    => '84',
                'book_color' => 'black',
                'book_name'  => 'Bible - extended version',
            ),
            array(
                'page_id'    => '83',
                'book_color' => 'green',
                'book_name'  => 'Bible - for children and Americans',
            ),
        ),
        array(
            'page_id'    => '68',
            'book_color' => 'green',
            'book_name'  => 'Bible - Quran mashup',
        ),

    ),
    array(
        'page_id'    => '96',
        'book_color' => 'yellow',
        'book_name'  => 'Bible - patch nr. 594',
    ),
);

И мне нужно проверить, содержит ли этот массив эту пару ключ => значение:

'book_name' => 'Bible'

Таким образом, как вы можете видеть, это может быть в первом подмассиве или во втором или даже внутри более вложенных массивов.

Как сделать проверку, которая может вернуть true или false в зависимости от того, найден ли, независимо от того, на каком уровне эта пара ключей и значений.

  • 0
    И что делать, если нет
  • 0
    @Uchiha вернуть ложь или эхо "Бог не найден" ...
Теги:
arrays
multidimensional-array

1 ответ

1
Лучший ответ

Вы можете использовать array_walk_recursive здесь, например, как

$book_name = [];

array_walk_recursive($arr, function($v, $k)use(&$book_name) {
    if ($k == 'book_name') {
        $book_name[$v] = (strpos($v,"Bible") !== false) ? "Found" : "God not found";
    }
});
print_r($book_name);

демонстрация

  • 1
    Вау, я проверю это решение. интересно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню