Установка вложенного массива в переменную при совпадении индекса

Итак, у меня есть большой массив с именем $categoryData, который структурирован следующим образом:

array: [
    123=> array:[
        total:[
            red=> 155
            blue=> 200
        ]
    ]
    456=> array:[
        total:[
            red=> 678
            blue=> 443
        ]
    ]
    376=> array:[
        total:[
            red=> 843
            blue=> 456
        ]
    ]
    236=> array:[
        total:[
            red=> 456
            blue=> 890
        ]
    ]
]

Это нормально, и теперь я зацикливаюсь, чтобы в основном установить объект в массив для правильного индекса, в данном случае 123. Итак, я делаю это:

foreach($categoryData as $data){
    if ($data[0] == 123){
        $printData = $data[0];
    }
}

dd($printData);

Это дает мне ошибку undefined offset: 0 , и я не знаю, почему. Я получаю правильную структуру, если выгружаю ее в цикле foreach, поэтому все, что я хочу сделать, это установить массив для индекса в $printData, когда он совпадает, если это имеет смысл

Что я делаю не так?

Ваш внутренний массив не числовой, он ассоциативный. Почему вы ожидаете, что индекс 0 будет существовать?

El_Vanja 18.12.2020 18:04

И вы сравниваете не на том уровне. Ваш идентификатор — это ключ верхнего уровня, и вы пытаетесь найти его на следующем уровне (где единственный ключ — total).

El_Vanja 18.12.2020 18:10

@el_vanja, поэтому я бы установил только $data, а не $data[0]

Geoff_S 18.12.2020 18:16

@el_vanja индекс 0 существует в массиве categoryData, это то, что я сопоставляю. Затем я хочу, чтобы все внутри этого массива было установлено в переменную printData.

Geoff_S 18.12.2020 18:41
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
2
4
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, вы перепутали с ключом и значениями. Согласно вашему примеру, вы должны сравнивать индекс, а не значение:

foreach($categoryData as $key=>$data){
    if (123 === $key){
        $printData = $data;
    }
}

Демо


Но, честно говоря, я не знаю, почему вы хотите повторять foreach, когда вы можете получить свой массив по ключу:

$printData = $categoryData[123];

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