У меня есть и массив, который производится из веб-сервиса.
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 ..
Почему это так ..?
Ваш вывод правильный, $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
В коде нет ничего плохого, поскольку 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
?>