PHP数组中的歧义
我想显示developer.ean.com API中的行程详细信息。通过传递客户的行程ID和电子邮件ID,我得到了预订的详细信息。 结果是以json格式提交,因此我对其进行了解码,并使用以下方法创建了数组:PHP数组中的歧义,php,Php,我想显示developer.ean.com API中的行程详细信息。通过传递客户的行程ID和电子邮件ID,我得到了预订的详细信息。 结果是以json格式提交,因此我对其进行了解码,并使用以下方法创建了数组: $array=json_decode($result); 问题在于API产生的任何结果都包含以下问题: 对于某些记录,它提供如下数组: [Itinerary] => stdClass Object ( [HotelConfirmation] =
$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
)
)
)
)
[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
)
)
if (isset($array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0])) {
$array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'] = $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0];
}
在这种情况下,HotelConfirmation和Hotel是包含[0]作为对象的数组
对于某些记录,它提供如下数组:
[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
)
)
)
)
[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
)
)
if (isset($array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0])) {
$array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'] = $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0];
}
在这种情况下,酒店确认和酒店本身就是一个对象
我在这里只提供了很少的数据,实际上是它的大数组,我想提供它的列表。但是数组包含这样的模糊性。我如何处理这个问题。有什么解决办法吗
提前感谢。您可以使用is\u array()
检查它:
if (is_array($hotel)) {
$hotel = $hotel[0];
}
检查对象或数组:
if( is_object($Itinerary -> HotelConfirmation)) {
// do one thing or nothing
} elseif( is_array($Itinerary -> HotelConfirmation)) {
$Itinerary -> HotelConfirmation = array_shift( $Itinerary -> HotelConfirmation );
}
将
true
作为第二个参数传递给json\u decode
。这将创建一个数组,而不是stdClass
$array=json_decode($result, true);
换个说法:
$array=json_decode($result,TRUE);
是否始终处理数组?看起来您可能需要考虑模型中的两种可能性。。。检查hotel节点是否包含and数组或obj,并相应地进行操作 可以在数组中键入case对象
$array = json_decode($result);
$array = (array)$array
或者,您也可以将true作为json_decode()中的第二个参数传递
根据php文档
When TRUE, returned objects will be converted into associative arrays.
您可以像这样规范化输入:
// 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
)
)
首先要做到:
$array = json_decode($result, true);
这样做:
[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
)
)
)
)
[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
)
)
if (isset($array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0])) {
$array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'] = $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0];
}
它肯定会起作用。您最初的json字符串是什么?有时类似于
HotelConfirmation:{“supplierId”:13}
有时类似于HotelConfirmation:[{“supplierId”:13}]
每一种情况发生时有什么模式吗?没有任何一种情况发生record@Kunal:你能在某个地方发布一个完整的JSON结果以便我测试吗?谢谢…实际上我在你代码的帮助下做了一些调整…非常感谢兄弟