2016-07-28 103 views
1

我正在尝试装运API。 API返回对象。但是,当我尝试使用简单的foreach循环访问某个值时,它无法按预期工作。我尝试了不同的方法,但一切都给了我一个空白页面。无法从PHP对象访问值

以下是从API接收到的响应。

stdClass Object 
(
[ConsignmentTrackEvents_Details_NewResult] => stdClass Object 
    (
     [ConsignmentTrack] => Array 
      (
       [0] => stdClass Object 
        (
         [ERROR] => 
         [DOCKNO] => 888888 
         [TRANSIT_LOCATION] => Location, Location 
         [ACTIVITY] => Out For Delivery 
         [EVENTDATE] => 22 Jul 2016 
         [EVENTTIME] => 21:05:48 
         [NEXT_LOCATION] => Coimbatore 
         [TRACKING_CODE] => O 
        ) 

       [1] => stdClass Object 
        (
         [ERROR] => 
         [DOCKNO] => 888888 
         [TRANSIT_LOCATION] => Location, Location 
         [ACTIVITY] => Picked up and Booking processed 
         [EVENTDATE] => 06 Jun 2016 
         [EVENTTIME] => 16:40:39 
         [NEXT_LOCATION] => 
         [TRACKING_CODE] => B 
        ) 

      ) 

    ) 

) 

然后我用下面的循环访问这些值。

foreach($result['ConsignmentTrackEvents_Details_NewResult'] ['ConsignmentTrack'] as $res){ 

echo $res['DOCKNO']; 

} 

我在这里做什么不对吗?

+2

这是*对象*而不是*数组*。使用对象表示法,而不是数组表示法。 –

+1

更改下面的foreach($ result-> ConsignmentTrackEvents_Details_NewResult-> ConsignmentTrack为$ res)''和'echo $ res-> DOCKNO;' –

+0

@JohnConde是的,现在我明白了。 – Rahul

回答

2

数组和对象是不同的东西,你$array['key']访问数组项与$object->key

foreach($result->ConsignmentTrackEvents_Details_NewResult->ConsignmentTrack as $res){ 
    echo $res->DOCKNO; 
} 
+0

非常感谢Ianis的帮助和澄清。我一直在学习PHP作为项目的一部分,目前只学习了Arrays,这段代码让我困惑。 – Rahul

0

对象属性你可以循环遍历主要收藏有foreach循环,然后向下钻取到对象包含在其中, (依次)包含您正在查找的数据。

<?php 
    // $result HERE IS THE MAIN DATA... 
    foreach($result as $key=>$data){ 
     $trackResult = $result['ConsignmentTrackEvents_Details_NewResult']; 
     foreach($trackResult as $intKey=>$objData){ 
      $dockNo   = $objData->DOCKNO; 
      $transit  = $objData->TRANSIT_LOCATION; 
      $activity  = $objData->ACTIVITY; 
      $eventDate  = $objData->EVENTDATE; 
      $eventTime  = $objData->EVENTTIME; 
      $nextLocation = $objData->NEXT_LOCATION; 
      $trackingCode = $objData->TRACKING_CODE; 

      echo $dockNo; 

     } 

    }