Как найти ключ в многомерном массиве?

У меня есть многомерный массив, и мне нужно создать функцию searchCategory($categories, $id), которая должна возвращать значение свойств title.

попробуйте этот код, он работает, но только для одного слоя многомерного массива.

Многомерный массив:

$categories = array(    array(
    "id" => 1,
    "title" =>  "Обувь",
    'children' => array(
        array(
            'id' => 2,
            'title' => 'Ботинки',
            'children' => array(
                array('id' => 3, 'title' => 'Кожа'),
                array('id' => 4, 'title' => 'Текстиль'),
            ),
        ),
        array('id' => 5, 'title' => 'Кроссовки',),
    )),     array(
    "id" => 6,
    "title" =>  "Спорт",
    'children' => array(
        array(
            'id' => 7,
            'title' => 'Мячи'
        )
    )   ), );

Код, который я пытаюсь решить проблему:

function searchCategory($categories, $id) {

    foreach($categories as $category) {

        if ($category['id'] == $id) {

            echo $category['title'] . '<br>';

        }
    } 
};

Мне нужна моя функция для поиска значения id во всех массивах и возврата заголовка в случае найденного массива

Вам не хватает еще одного цикла foreach для перебора элементов во внутренних массивах. Попробуйте сделать это: foreach ($category as $key=>$value) { echo "$key: $value }

tomerpacific 29.05.2019 11:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот случай рекурсивного итератора для вас, пожалуйста, просмотрите встроенный документ для объяснения

function searchCategory($categories, $id)
{
    $arrayiter = new RecursiveArrayIterator($categories);
    $iteriter  = new RecursiveIteratorIterator($arrayiter);
    foreach ($iteriter as $key => $value) {
        // checking if iterator comes to point where key is id and value matched
        if ($key == 'id' && $value == $id) {
            // returning matched value with current iterator instance
            return $iteriter->getInnerIterator()['title'];
        }
    }
    return '';
}
echo searchCategory($categories, 2).'<br/>';
echo searchCategory($categories, 7);

Рабочая демонстрация.

Рекурсивный массивИтератор — этот итератор позволяет сбрасывать и изменять значения и ключи при переборе массивов и объектов так же, как Итератор массива. Кроме того, можно перебирать текущую запись итератора.
Рекурсивныйитераторитератор — может использоваться для перебора рекурсивных итераторов.
RecursiveIteratorIterator::getInnerIterator: Получить внутренний итератор

Ответ принят как подходящий

вам нужно сделать вашу функцию рекурсивно

Демонстрация: https://3v4l.org/CR7CD

function searchCategory($categories, $id) {
    foreach($categories as $category) {
        if ($category['id'] == $id)
            echo $category['title'] . '<br>';
        if (isset($category['children']))
            searchCategory($category['children'],$id);
    } 
}

Другие вопросы по теме