PHP数组中的歧义

时间:2012-06-28 12:11:23

标签: php

我想在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和酒店本身就是一个对象

我在这里只提供了一些数据实际上是它的大数组,我想提供它的列表。但是包含歧义的数组就像这样。我该如何处理这个问题。有什么解决方案吗?

提前致谢。

8 个答案:

答案 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);