如何访问PHP中嵌套Std对象数组中的数据


How to access data in nested Std Object array in PHP

我需要访问数据:"hotelID"、"name"、"address1"、"city"等。我在PHP中有以下Std Object数组($the_obj),其中包含以下数据:

object(stdClass)[1]
  public 'HotelListResponse' => 
    object(stdClass)[2]
      public 'customerSessionId' => string '0ABAAA87-6BDD-6F91-4292-7F90AF49146E' (length=36)
      public 'numberOfRoomsRequested' => int 0
      public 'moreResultsAvailable' => boolean false
      public 'HotelList' => 
        object(stdClass)[3]
          public '@size' => string '227' (length=3)
          public '@activePropertyCount' => string '227' (length=3)
          public 'HotelSummary' => 
            array (size=227)
             0 =>
              object(stdClass)[4]
              public 'hotelId' => 112304 
              public 'name' => La Quinta Inn and Suites Seattle Downtown 
              public 'address1' => 2224 8th Ave 
              public 'city' => Seattle 
              public 'stateProvinceCode' => WA 
              public 'postalCode' => 98121 
              public 'countryCode' => US 
              public 'airportCode' => SEA 
              public 'propertyCategory' => 1 
              public 'hotelRating' => 2.5

我尝试了以下方法,比如访问"名称":

echo $the_obj->HotelListResponse->HotelList->HotelSummary[0]->name;

此外,我还尝试使用foreach循环打印每个键和值对,但我不断出错。以下是我尝试过的:

foreach ($the_obj->HotelListResponse->HotelList->HotelSummary[0] as $key => $value){
    echo $key.' : '.$value.'<br />';
}

以下是我得到的错误:

  • 正在尝试获取非对象的属性
  • 警告:为foreach()提供的参数无效

感谢大家的回答,我已经找到了访问数组最深嵌套中的'hotelID'、'name'和所有其他键和值对的方法。

我将Std Object数组转换为关联数组,然后使用foreach循环访问每个值:

foreach ($the_obj["HotelListResponse"]["HotelList"]["HotelSummary"] as $value){
echo $value["hotelId"];
echo $value["name"];
//and all other values can be accessed
}

要同时访问(密钥和值):

foreach ($the_obj["HotelListResponse"]["HotelList"]["HotelSummary"] as $key=>$value){
    echo $key.'=>'.$value["hotelId"];
    echo $key.'=>'.$value["name"];
    //and all other keys as well as values can be accessed
    }

关于@Satya的回答,我想展示使用json函数进行对象到数组转换的更简单方法:

$obj = ...
$tmp = json_encode($obj);
$objToArray = json_decode($tmp,true);

通过这种方式,您可以轻松访问数组项。首先你可以转储结构。。。

试试这样的东西:

 $p=objectToArray($result);
recurse($p);
}
function objectToArray( $object )
    {
        if( !is_object( $object ) && !is_array( $object ) )
        {
            return $object;
        }
        if( is_object( $object ) )
        {
            $object = get_object_vars( $object );
        }
        return array_map( 'objectToArray', $object );
    }
function recurse ($array)
{
    //statements
    foreach ($array as $key => $value)
    {
        # code...
        if( is_array( $value ) )
        {   
          recurse( $value );
        }
        else
        {   $v=$value;
            $v=str_replace("&rsquo;",'''',strip_tags($v));
            $v=str_replace("&ndash;",'-',$v);
            $v=str_replace("&lsquo;",'''',strip_tags($v));
            $v=str_replace("&ldquo;",'"',strip_tags($v));
            $v=str_replace("&rdquo;",'"',strip_tags($v));
            $v=str_replace("&#8211;",'-',strip_tags($v));
            $v=str_replace("&#8217;",'''',strip_tags($v));
            $v=str_replace("&#39;",'''',strip_tags($v));
            $v=str_replace("&nbsp;",'',strip_tags($v));
            $v=html_entity_decode($v);
            $v=str_replace("&",' and ',$v);
        $v =  preg_replace('/'s+/', ' ', $v);
            if($key=="image")
            {
                if(strlen($v)==0)
                {
                    echo '<'.$key .'>NA</'.$key.'>';
                }
                else 
                {
                echo '<'.$key .'>'. trim($v)  .'</'.$key.'>';
                }
            }
            }
  }
}