Php 如何使用循环打印jSON值

Php 如何使用循环打印jSON值,php,json,Php,Json,我使用下面的代码打印jSON响应的输出,但是当我尝试打印时 echo $obj->HotelListResponse->customerSessionId; // This is working. echo $obj->HotelListResponse->HotelList->HotelSummary->name; // This is not working. 当响应仅包含一个节点时,其打印效果良好,但当多个节点具有相同的名称时,则其不打印。我试着使

我使用下面的代码打印jSON响应的输出,但是当我尝试打印时

echo $obj->HotelListResponse->customerSessionId;  // This is working.

echo $obj->HotelListResponse->HotelList->HotelSummary->name; // This is not working.
当响应仅包含一个节点时,其打印效果良好,但当多个节点具有相同的名称时,则其不打印。我试着使用foreach,如下所示。我还尝试使用while循环,但仍然无法打印酒店名称列表

我的jSON解码输出如下

总代码:

$url = "https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_AU&currencyCode=AUD&xml=<HotelListRequest><city>Brisbane</city><stateProvinceCode>QLD</stateProvinceCode><countryCode>AU</countryCode><arrivalDate>10/16/2014</arrivalDate><departureDate>10/18/2014</departureDate><RoomGroup><Room><numberOfAdults>2</numberOfAdults></Room></RoomGroup><numberOfResults>25</numberOfResults></HotelListRequest>";
$json = file_get_contents($url);
$obj = json_decode($json);

foreach($obj as $val) {
echo $val->HotelListResponse->HotelList->HotelSummary->name;
}
$url=”https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_AU¤cyCode=AUD&xml=BrisbaneQLDAU10/16/201410/18/2014225";
$json=文件获取内容($url);
$obj=json_decode($json);
外币($obj作为$val){
echo$val->HotelListResponse->HotelList->HotelSummary->name;
}

HotelSummary是一个数组:

echo $val->HotelListResponse->HotelList->HotelSummary[0]->name;
如果您想要所有酒店摘要:

foreach($obj as $val) {
    foreach($val->HotelListResponse->HotelList->HotelSummary as $sum) {
        echo $sum->name;
    }  
}

是的,您可以在foreach中直接访问它们。像这样:

foreach($obj->HotelListResponse->HotelList->HotelSummary as $val) {
             // ^^
    // since you're interested on just names, you can point it directly on that object, then each of that batch is in `$val`
    echo $val->name . '<br/>';
}

// or start from the parent
foreach($obj as $values) {

    $customerSessionId = $values->customerSessionId;
    echo $customerSessionId . '<hr/>';
    $hotelList = $values->HotelList;
    foreach($hotelList->HotelSummary as $hotelsummary) {
        echo $hotelsummary->name . '<br/>';
    }
}
foreach($obj->hotellistsresponse->HotelList->HotelSummary as$val){
// ^^
//因为您只对名称感兴趣,所以可以将其直接指向该对象,然后该批中的每一个都在“$val”中`
echo$val->name.“
”; } //或者从父母开始 foreach($obj作为$values){ $customerSessionId=$values->customerSessionId; echo$customerSessionId.“
”; $hotelList=$values->hotelList; foreach($hotelList->HotelSummary作为$HotelSummary){ echo$hotelsummary->name.“
”; } }
试试这个

foreach($obj->HotelListResponse->HotelList->HotelSummary as $val) {
    echo $val->name . '<br/>';
}
foreach($obj->hotellistsresponse->HotelList->HotelSummary as$val){
echo$val->name.“
”; }
不,仍然不工作。警告:为foreach()提供的参数无效。我质疑您当时发布的json。如何只打印第一个值而不打印所有值?@lock,可能是这样:
$first=true;foreach($obj->hotellistsresponse->HotelList->HotelSummary as$val){if($first){//do something$first=false;}其他{//do something}//do something}
如何只打印第一个值而不打印所有值?@lock您能解释一下吗?你的目标是什么?第一个值是什么?你能提供更多的上下文吗?不清楚。@lock如果只需要第一个值,可以直接将其指向第一个索引,或者使用
break之后echoing@lock当然,伙计,没问题