【问题标题】:foreach not looping correctly for a webserviceforeach 没有为 Web 服务正确循环
【发布时间】:2014-09-21 12:42:06
【问题描述】:

我有一个从 web 服务生成的数组。

Array ( 
    [TPA_Extensions] => Array (
        [TPARoomDetail] => Array ( 
            [GuestCounts] => Array ( 
                [GuestCount] => Array ( 
                        [!AgeQualifyingCode] => 10 
                        [!Count] => 1
                ) 
            ) 
            [!Occupancy] => Single 
            [!OccupancyCode] => SGL 
        ) 
    ) 
    [!IsRoom] => true 
    [!Quantity] => 1 
    [!RoomType] => Palace Gold Club Room 
    [!RoomTypeCode] => PGC 
)

我的foreach循环如下

foreach ($roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"] as $guestcount) {

echo "guest count1->";print_r($guestcount);
echo "guest count2->";  print_r($roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"]);
}

我得到的输出是 客人

count1->10 guest count2->Array ( [!AgeQualifyingCode] => 10 [!Count] => 1 ) 

guest count1 应该是一个数组

Array ( [!AgeQualifyingCode] => 10 [!Count] => 1 )  but it comes as an int 10 ..

为什么会这样..?

【问题讨论】:

  • guest count1$roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"] 的第一个元素是[!AgeQualifyingCode] => 10

标签: php arrays for-loop foreach


【解决方案1】:

你的输出是正确的,$guestcount持有数字'10',

在哪里$roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"] 持有一个数组。

这是你的循环:

foreach ($roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"] as $guestcount) {

  echo "guest count1->";print_r($guestcount);
  echo "guest count2->";  print_r($roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"]);
}

ths 循环将运行 2 次,因为这是 GuestCount 数组中的子项数。 它将是“10”,然后是“1”,完全反映了数组的结构:

[!AgeQualifyingCode] => 10 
[!Count] => 1

【讨论】:

    【解决方案2】:

    代码中没有任何问题,因为第一个索引保存整数值,第二个索引保存数组。但是,您访问数组值的方法非常复杂,看起来不太好。您可以通过以下更有效的方式访问数组值和键。

    1)创建一个方法,获取要访问的数组的路径

    例如,根据您的代码,如果我想访问 AgeQualifyingCode 键,那么我必须编写 $roomType["TPA_Extensions"]["TPARoomDetail"]["GuestCounts"]["GuestCount"] [“AgeQualifyingCode”]。

    这看起来不太好,如果你只需要传递你想要访问值的键的路径,那不是很好。

    例如:/TPA_Extensions/TPARoomDetail/GuestCounts/GuestCount/AgeQualifyingCode

    您只需要定义一个获取键路径并返回该键值的函数

    <?php
    
        function path($path=null){
            if($path){
                $array = $theNameOfOriginalArray
                $path  = explode('/',$path);
    
                foreach($path as $sub){
                    if(isset($array[$sub])){
                        $array = $array[$sub];
                    }
                }
    
                return $array;
            }
        }
    
        $value = path('TPA_Extensions/TPARoomDetail/GuestCounts/GuestCount/AgeQualifyingCode');
        //will return 10
    ?> 
    

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多