我想在developer.ean.com API中显示行程详细信息。通过传递客户的行程ID和电子邮件ID,我得到了预订的详细信息。 结果是以json格式进行,因此我使用以下方法对其进行解码并创建数组:
$array=json_decode($result);
问题是来自API的结果包含的问题如下:
对于某些记录,它提供如下数组:
[Itinerary] => stdClass Object
(
[HotelConfirmation] => Array
(
[0] => stdClass Object
(
[supplierId] => 13
[chainCode] => EP
[arrivalDate] => 07/24/2012
[departureDate] => 07/26/2012
)
[Hotel] => Array
(
[0] => stdClass Object
(
[hotelId] => 394808
[statusCode] => A
[name] => Barkston Youth Hostel
)
)
)
)
在这种情况下,HotelConfirmation和Hotel是包含[0]作为对象的数组
对于某些记录,它提供如下数组:
[Itinerary] => stdClass Object
(
[HotelConfirmation] => stdClass Object
(
[supplierId] => 13
[chainCode] => EP
[arrivalDate] => 07/24/2012
[departureDate] => 07/26/2012
)
[Hotel] => stdClass Object
(
[hotelId] => 394808
[statusCode] => A
[name] => Barkston Youth Hostel
)
)
在这种情况下,HotelConfirmation和酒店本身就是一个对象
我在这里只提供了一些数据实际上是它的大数组,我想提供它的列表。但是包含歧义的数组就像这样。我该如何处理这个问题。有什么解决方案吗?
提前致谢。
答案 0 :(得分:2)
将true
作为json_decode
的第二个参数传递。这将创建一个数组,而不是stdClass
$array=json_decode($result, true);
答案 1 :(得分:2)
你可以像这样标准化输入:
// get objects as arrays
$array = json_decode($result, true);
// remove the sub-level [0], when necessary
foreach ($array as $key => $value) {
if (is_array($value[0])) {
$array[$key] = $value[0];
}
}
然后结果看起来总是一样:
[Itinerary] => Array
(
[HotelConfirmation] => Array
(
[supplierId] => 13
[chainCode] => EP
[arrivalDate] => 07/24/2012
[departureDate] => 07/26/2012
)
[Hotel] => Array
(
[hotelId] => 394808
[statusCode] => A
[name] => Barkston Youth Hostel
)
)
答案 2 :(得分:1)
首先这样做:
$array = json_decode($result, true);
Which will convert objects into associative arrays
并做这样的调整:
if (isset($array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0])) {
$array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'] = $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0];
}
它肯定会起作用。
答案 3 :(得分:0)
您可以使用is_array()
进行检查:
if (is_array($hotel)) {
$hotel = $hotel[0];
}
答案 4 :(得分:0)
检查对象或数组:
if( is_object($Itinerary -> HotelConfirmation)) {
// do one thing or nothing
} elseif( is_array($Itinerary -> HotelConfirmation)) {
$Itinerary -> HotelConfirmation = array_shift( $Itinerary -> HotelConfirmation );
}
答案 5 :(得分:0)
只需改为:
$array=json_decode($result,TRUE);
并始终处理数组?
答案 6 :(得分:0)
看起来您可能需要考虑模型中的两种可能性...检查酒店节点是否包含和数组或obj并相应地操作。
答案 7 :(得分:0)
你可以输入数组中对象的大小写。
$array = json_decode($result);
$array = (array)$array
或者你可以传递true作为json_decode();
中的第二个参数根据php文档
When TRUE, returned objects will be converted into associative arrays.
$array = json_decode($result, true);