Я знаю, что об этом спрашивали здесь: Перебрать массив 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?
имя родительского массива $events
Да, извините, это было непонятно, print_r ($events) выводит полный массив.
Похоже, что $events - это ваш родительский массив, но это сам массив, поэтому в вашем случае $events[0]->ProductDetail - это массив, который вы хотите перебрать.






Для доступа к элементам массива вы используете квадратные скобки $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;
}
Оба дают одинаковые результаты всего двумя способами. Есть и другие способы. Я думаю, что это наиболее распространенный способ, который вы пробовали. Я предлагаю вам использовать то, что вы понимаете лучше всего.
Если вы хотите перебрать внешний массив, вам также понадобится цикл. В этом случае у вас будет вложенный цикл.
В моем примере я предположил, что вы просматриваете только внутренний массив сведений о продукте.
Это имеет смысл, я попробую это и посмотрю, как это работает, спасибо.
попробуйте это и посмотрите, работает ли это
foreach($events as $event) {
foreach($event->ProductDetail as $product) {
echo $product->ProductId;
echo $product->ProductName;
}
}
Возможный дубликат Нельзя использовать объект типа stdClass в качестве массива?