2

developer.ean.comAPIから旅程の詳細を表示したいと思います。お客様の旅程IDとEメール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とHotelはそれ自体がオブジェクトです。

私はここで実際にその大きな配列のほんの少しのデータを提供します、そして私はそれのリストを提供したいと思います。しかし、このようなあいまいさを含む配列。この問題をどのように処理できますか。解決策はありますか?

前もって感謝します。

4

8 に答える 8

2

true2番目の引数として。に渡しますjson_decode。これにより、代わりに配列が作成されますstdClass

$array=json_decode($result, true);
于 2012-06-28T12:16:58.647 に答える
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
            )
       )
于 2012-06-28T12:24:30.480 に答える
1

最初にこれを行います:

$array = json_decode($result, true);

オブジェクトを連想配列に変換します

そして、次のように調整します。

if (isset($array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0])) {
    $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'] = $array['HotelItineraryResponse']['Itinerary']['HotelConfirmation'][0];
}

それは間違いなく動作します。

于 2012-06-29T06:58:38.683 に答える
0

オブジェクトまたは配列を確認します。

if( is_object($Itinerary -> HotelConfirmation)) {
// do one thing or nothing
} elseif( is_array($Itinerary -> HotelConfirmation)) {
$Itinerary -> HotelConfirmation = array_shift( $Itinerary -> HotelConfirmation );
}
于 2012-06-28T12:15:47.430 に答える
0

これに変更するだけです:

$array=json_decode($result,TRUE);

常に配列を処理しますか?

于 2012-06-28T12:17:39.893 に答える
0

モデルで両方の可能性を考慮する必要があるようです...ホテルノードに配列またはobjが含まれているかどうかを確認し、それに応じて動作します。

于 2012-06-28T12:17:41.220 に答える
0

あなたはis_array()それをチェックするために使うことができます:

if (is_array($hotel)) {
    $hotel = $hotel[0];
}
于 2012-06-28T12:15:19.600 に答える
0

配列内のオブジェクトをcaseと入力できます。

$array = json_decode($result);
$array = (array)$array

または、json_decode();の2番目の引数としてtrueを渡すこともできます。

phpドキュメントによると

When TRUE, returned objects will be converted into associative arrays.

$array = json_decode($result, true);
于 2012-06-28T12:21:14.853 に答える