PHP Цикл через тип массива stdClass Error

Я знаю, что об этом спрашивали здесь: Перебрать массив php, и я ищу очень похожее решение для ProductName и ProductId, но предыдущие ответы не помогают.

Array ( [0] => stdClass Object ( 
[Id] => A048FDBF-67FF-4D28-8F53-7D41DCAC45A9 
[ProductDetail] => Array 
    ( 
        [0] => stdClass Object 
            ( 
                [ProductId] => A5C43424-FFD3-4097-80D4-01E04F759115 
                [ProductName] => Influencer Track 
                [ProductCode] => 
                [ProductType] => Session 
                [ProductDescription] => 
                [SessionCategoryName] => 
                [SessionCategoryId] => 00000000-0000-0000-0000-000000000000 
                [IsIncluded] => 
                [StartTime] => 2019-10-08T08:00:00 
                [EndTime] => 2019-10-08T18:00:00 
                [Status] => Active 
                [Capacity] => -1 
            ) 
        [1] => stdClass Object 
            ( 
                [ProductId] => 163AB381-1C3D-43AE-911D-0729982B8C5C 
                [ProductName] => BS 6:1 How to deal with the new normal using Sales & Operations Planning and Demand Driven MRP 
                [ProductCode] => 
                [ProductType] => Session 
                [ProductDescription] => With the inclusion of Sales and Operations Planning and DDMRP, IFS Applications 10 offers a highly competent set of planning capabilities. Join us in this session to discover how IFS planning strategies can be combined to drive process improvements beyond the expected. 
                [SessionCategoryName] => 
                [SessionCategoryId] => 00000000-0000-0000-0000-000000000000 
                [IsIncluded] => 
                [StartTime] => 2019-10-09T13:00:00 
                [EndTime] => 2019-10-09T13:45:00 
                [Status] => Active 
                [Capacity] => -1 
            ) 
        [2] => stdClass Object 
            ( 
                [ProductId] => 0E1F44BA-54AA-48AC-B54D-0802CCCD3A5A 
                [ProductName] => BS 1:5 Insights session 
                [ProductCode] => [ProductType] => Session 
                [ProductDescription] => [SessionCategoryName] => 
                [SessionCategoryId] => 00000000-0000-0000-0000-000000000000 
                [IsIncluded] => 
                [StartTime] => 2019-10-08T13:45:00 
                [EndTime] => 2019-10-08T14:30:00 
                [Status] => Active 
                [Capacity] => -1 
            ) 
        [3] => stdClass Object 
            ( 
                [ProductId] => DA447217-EA3F-4A14-AD83-0AD184E1D5C4 
                [ProductName] => BS 1:1 Are you ready for tomorrow’s Challengers in Manufacturing? 
                [ProductCode] => 
                [ProductType] => Session 
                [ProductDescription] => Trends like automation, legislation and sustainability present both challenges and opportunities. Our Global Industry Directors will discuss current and emerging trends in the Manufacturing industry and how our customers are addressing them. Join our session to find out how you can leverage the latest trends to disrupt your market. 
                [SessionCategoryName] => 
                [SessionCategoryId] => 00000000-0000-0000-0000-000000000000 
                [IsIncluded] => 
                [StartTime] => 2019-10-08T13:45:00 [EndTime] => 2019-10-08T14:30:00 [Status] => Active [Capacity] => -1 
            ) 
        [4] => stdClass Object 
            ( 
                [ProductId] => 244A8FBB-F731-43B5-909A-0B3DA39DF75C 
                [ProductName] => Influencer Dinner, time tbc 
                [ProductCode] => 
                [ProductType] => Session 
                [ProductDescription] => 
                [SessionCategoryName] => 
                [SessionCategoryId] => 00000000-0000-0000-0000-000000000000 
                [IsIncluded] => 
                [StartTime] => 2019-10-07T19:30:00 
                [EndTime] => 2019-10-07T22:30:00 
                [Status] => Active 
                [Capacity] => -1 
            )
        )
    )
)

Я пытаюсь это сделать, но получаю сообщение об ошибке Невозможно использовать объект типа stdClass как массив

for ($i = 0; $i < count($events); $i++) {
      echo $events[$i]['ProductId'];
      echo $events[$i]['ProductName'];
}

Является ли forloop лучшим способом сделать это, и мне нужно использовать json_decode или какой-либо другой метод для извлечения объекта stdClass?

Возможный дубликат Нельзя использовать объект типа stdClass в качестве массива?

user1334621 27.03.2019 02:39

имя родительского массива $events

Festus Yuma 27.03.2019 02:49

Да, извините, это было непонятно, print_r ($events) выводит полный массив.

fr0styc0d3r 27.03.2019 03:01

Похоже, что $events - это ваш родительский массив, но это сам массив, поэтому в вашем случае $events[0]->ProductDetail - это массив, который вы хотите перебрать.

Evo_x 27.03.2019 03:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
4
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для доступа к элементам массива вы используете квадратные скобки $array['ProductId']. Но чтобы получить доступ к свойству в объекте, вы должны использовать обозначение стрелки $object->ProductId. У вас есть смесь того и другого.

Вам нужно будет сделать что-то вроде

echo $events[$i]->ProductId;

От корня до доступа, скажем, первый идентификатор продукта, который вы бы сделали.

echo $root[0]->ProductDetail[0]->ProductId;

Чтобы получить доступ ко всем идентификаторам продукта, вы должны сделать что-то вроде этого

$products = $root[0]->ProductDetail;
for ($i = 0; $i < count($products); $i++) { 
    echo $products[$i]->ProductId; 
}

Или

$products = $root[0]->ProductDetail;
foreach($products as $object) {
    echo $object->ProductId;
}

Оба дают одинаковые результаты всего двумя способами. Есть и другие способы. Я думаю, что это наиболее распространенный способ, который вы пробовали. Я предлагаю вам использовать то, что вы понимаете лучше всего.

Если вы хотите перебрать внешний массив, вам также понадобится цикл. В этом случае у вас будет вложенный цикл.

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

Это имеет смысл, я попробую это и посмотрю, как это работает, спасибо.

fr0styc0d3r 27.03.2019 03:01
Ответ принят как подходящий

попробуйте это и посмотрите, работает ли это

foreach($events as $event) {
    foreach($event->ProductDetail as $product) {
        echo $product->ProductId;
        echo $product->ProductName;
    }
}

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