Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组中的歧义_Php - Fatal编程技术网

PHP数组中的歧义

PHP数组中的歧义,php,Php,我想显示developer.ean.com API中的行程详细信息。通过传递客户的行程ID和电子邮件ID,我得到了预订的详细信息。 结果是以json格式提交,因此我对其进行了解码,并使用以下方法创建了数组: $array=json_decode($result); 问题在于API产生的任何结果都包含以下问题: 对于某些记录,它提供如下数组: [Itinerary] => stdClass Object ( [HotelConfirmation] =

我想显示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
                )
            )
        )
    )
[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结果以便我测试吗?谢谢…实际上我在你代码的帮助下做了一些调整…非常感谢兄弟