foreach не работает правильно для веб-сервиса

У меня есть и массив, который производится из веб-сервиса.

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 ..

Почему это так ..?

0

Решение

Ваш вывод правильный, $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"]);
}

этот цикл будет выполняться 2 раза, потому что это число детей в GuestCount массив.
это будет ’10’, затем ‘1’, точно отражая структуру вашего массива:

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

Другие решения

В коде нет ничего плохого, поскольку 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
?>
0

По вопросам рекламы [email protected]