PHP遍历数组类型stdClass错误

时间:2019-03-27 01:31:25

标签: php arrays

我知道在这里有人问过这个问题:Loop through an array 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对象?

2 个答案:

答案 0 :(得分:0)

要访问数组中的项目,请使用方括号$array['ProductId']。 但是要访问对象中的属性,您必须使用箭头符号$object->ProductId。 两者都有。

您需要做类似

的操作
echo $events[$i]->ProductId;

从根到访问,假设您要执行的第一个产品ID

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

要访问所有产品ID,您将执行以下操作

$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;
}

两种方法都可以产生相同的结果。还有其他方法。我想这些是最常见的,也是您尝试过的一种方式。我建议您使用最了解的方式。

如果要迭代外部数组,则也需要一个循环。在这种情况下,您将有一个嵌套循环。

在我的示例中,我假设您仅遍历内部产品详细信息数组。

答案 1 :(得分:0)

尝试一下,看看是否有效

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