0

配列を整理する必要があります。そして、すべての同様の情報を一緒に収集します。

これは私がテーブルに持ってくる巨大な注文になるでしょう、しかしそれは私のスキルセットをはるかに超えており、私はそれを3日間修正しようとしています。

メッセージはWebサービスから送信されますが、出力/応答を完全に制御することはできません。

すべての情報を入力できるようにする必要がありますが、SOAPオブジェクトの応答は次のとおりです(これも削減されています)。

                [0] => RoomInformation Object
                    (
                       [Details] => DetailsType Object
                            (
                                [Total] => TotalType Object
                                    (
                                        [AmountAfterTax] => 1.00   
                                    )
                                [EffectiveDate] => 2011-08-12   
                                [AvailabilityStatus] => AvailableForSale
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [RoomId] => 1860
                                        [RoomNo] => THAH01
                                        [Description] => Hotel Alpha
                                    )
                            )
                    )

                [1] => RoomInformation Object
                    (   
                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (

                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-12
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [RoomId] => 1861
                                        [RoomNo] => THAH02
                                        [Description] => Hotel Alpha
                                    )
                           )
                    )
                [2] => RoomInformation Object
                    (

                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (
                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-12
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [Amenities] => stdClass Object
                                            (
                                            )

                                        [Configurations] => stdClass Object
                                            (
                                            )

                                        [RoomId] => 1226
                                        [RoomNo] => DENM01
                                        [Description] => Hotel Beta
                                    )
                            )

                    )

                [3] => RoomInformation Object
                    (
                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (
                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-12
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                                [MoreRatesExistInd] => 
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [Amenities] => stdClass Object
                                            (
                                            )

                                        [Configurations] => stdClass Object
                                            (
                                            )

                                        [RoomId] => 1227
                                        [RoomNo] => DENM02
                                        [Description] => Hotel Beta
                                    )
                            )
                    )

                [4] => RoomInformation Object
                    (
                       [Details] => DetailsType Object
                            (
                                [Total] => TotalType Object
                                    (
                                        [AmountAfterTax] => 1.00   
                                    )
                                [EffectiveDate] => 2011-08-13   
                                [AvailabilityStatus] => AvailableForSale
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [RoomId] => 1860
                                        [RoomNo] => THAH01
                                        [Description] => Hotel Alpha
                                    )
                            )
                    )

                [5] => RoomInformation Object
                    (   
                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (

                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-13
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [RoomId] => 1861
                                        [RoomNo] => THAH02
                                        [Description] => Hotel Alpha
                                    )
                           )
                    )                    
                                        [2] => RoomInformation Object
                    (

                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (
                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-13
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [Amenities] => stdClass Object
                                            (
                                            )

                                        [Configurations] => stdClass Object
                                            (
                                            )

                                        [RoomId] => 1226
                                        [RoomNo] => DENM01
                                        [Description] => Hotel Beta
                                    )
                            )

                    )

                [3] => RoomInformation Object
                    (
                        [Details] => DetailsType Object
                            (
                                [RoomRate] => RoomRateType Object
                                    (
                                        [Total] => TotalType Object
                                            (
                                                [AmountAfterTax] => 1.00
                                            )
                                        [EffectiveDate] => 2011-08-13
                                        [AvailabilityStatus] => AvailableForSale
                                    )
                                [MoreRatesExistInd] => 
                            )

                        [RoomInformationExtend] => TPA_ExtensionsType Object
                            (
                                [RoomDetails] => RoomDetails Object
                                    (
                                        [Amenities] => stdClass Object
                                            (
                                            )

                                        [Configurations] => stdClass Object
                                            (
                                            )

                                        [RoomId] => 1227
                                        [RoomNo] => DENM02
                                        [Description] => Hotel Beta
                                    )
                            )
                    )

TL; DR

各ホテルにはID付きの2つの部屋があります。これらの2つのIDはそれぞれ日付で区切られていますが、配列の異なる部分にあります:(

[Hotel A]
 HotelA RoomId = 01
 Date = 12-08-2011
[Hotel A]
 HotelA RoomId = 02
 Date = 12-08-2011
[Hotel B]
 HotelB RoomId = 01
 Date = 12-08-2011
[Hotel B]
 HotelB RoomId = 02
 Date = 12-08-2011
[Hotel A]
 HotelA RoomId = 01
 Date = 13-08-2011
[Hotel A]      
 HotelA RoomId = 02
 Date = 13-08-2011
[Hotel B]
 HotelB RoomId = 01
 Date = 13-08-2011
[Hotel B]
 HotelB RoomId = 02
 Date = 13-08-2011

私はそれらをそのように配列に入れられるようにしたいと思います:

[Hotel A]
 HotelA RoomId = 01
 Date 12-08-2011
 Date 13-08-2011
 HotelA RoomId = 02
 Date 12-08-2011
 Date 13-08-2011

助けてください。私は髪を抜いてきました:(

iveが試したことの例を次に示します。

$hotelinfo = array();
$k=0;
for($i = 0; $i < count($result->RoomInformation); $i++)
{
    $flag = false;
    $HotelObj    = $result->RoomInformation[$i];
    $HotelName   = $result->RoomInformation[$i]->RoomInformationExtend->RoomDetails->Description;
    $HotelId     = $result->RoomStays->RoomStay[$i]->RoomInformation->RoomDetails->RoomId;
    //$hotelinfo[$i][$HotelName] = array();
    $hotelinfo[count($hotelinfo)] = array();
    $hotelinfo[count($hotelinfo)][$HotelName] = array();
    for($c = 0; $c < count($result->RoomInformation); $c++)
    {           
        $thishotelObj = $result->RRoomInformation[$c];
        $thisHotelName = $thishotelObj->RoomInformationExtend->RoomDetails->Description;
        $thisHotelId = $thishotelObj->TPA_Extensions->RoomDetails->RoomId;      
        if($thisHotelName == $HotelName & $thisHotelId == $HotelId){
            $hotelinfo[$i][$HotelName][$c] = $HotelName;
            $hotelinfo[$i][$HotelName][$c] = $thisHotelName;
            $i++;                           
        }
    }
}

私もこれで正しい方向に進んでいましたか?

4

2 に答える 2

2

このようなforeachループで十分だと思います。PHPは、更新時に配列メンバーの存在をチェックしないため、必要なキーを追加するだけです。

$HotelRooms = array();
$foreach($result as $r)
{
  $HotelName = $r->RoomInformationExtend->RoomDetails->Description;
  $HotelRooms[$HotelName][$r->RoomInformationExtend->RoomDetails->RoomId][] = $r->Details->EffectiveDate
}
于 2011-01-23T05:35:20.293 に答える
1

あなたがこれをするとき...

$hotelinfo[count($hotelinfo)] = array();
$hotelinfo[count($hotelinfo)][$HotelName] = array();

実際には、に2つの要素を追加してい$hotelinfoます。たとえば、すでに4つの要素が含まれている場合、最初の行は新しいインデックスであるインデックス4を設定し(既存のインデックスは0、1、2、および3)、要素を追加します。

最初の行が完了したので、の要素数$hotelinfoは5になり、2番目の行はインデックス5を設定しますが、インデックス5は次の空のスロットに対応するため、2番目の要素が追加されます(インデックス0の最終結果の場合) -5が設定され、4と5は両方とも新しい)。

あなたのコードから判断すると、これはあなたが意図したものではないと思います。


余分なマイル(または2マイル)を行く...

最初にやりたいことは、データをより使いやすい形式に変換することだと思います。最初にホテルごとにグループ化され、次に部屋IDごとにグループ化されます。だから、それをやってみましょう:

$hotelInfo = array();
foreach($result->RoomInformation as $roomInfo) {

    $hotelName = $roomInfo->RoomInformationExtend->RoomDetails->Description;

    if(!isset($hotelInfo[$hotelName])) {
        $hotelInfo[$hotelName] = array();
    }
    $thisHotel = $hotelInfo[$hotelName];

    $roomId = $roomInfo->RoomInformationExtend->RoomDetails->RoomId;

    if(!isset($thisHotel[$roomId])) {
        $thisHotel[$roomId] = array();
    }
    $thisRoom = $thisHotel[$roomId];

これ$thisRoomで、情報を入力できるオブジェクトができました。リスト内の別のアイテムが特定のホテルと部屋の組み合わせのオブジェクトをすでに作成している場合、新しいアイテムを作成するのではなく、作成済みのアイテムを取得するだけです。

次に、現在のデータ項目である関連情報を部屋オブジェクトに追加します。

    if(isset($roomInfo->Details)) {
        if(isset($roomInfo->Details->EffectiveDate)) {
            // "$foo[] = bar" appends 'bar' to the array '$foo'
            $thisRoom[] = $roomInfo->Details->EffectiveDate;
        }

        if(isset($roomInfo->Details->RoomRate)) {
            if(isset($roomInfo->Details->RoomRate->EffectiveDate)) {
                $thisRoom[] = $roomInfo->Details->RoomRate->EffectiveDate;
            }
        }
    }
}

$hotelInfoこれを実行すると、次のような構造になります。

array(
    ['Hotel Alpha'] => array(
        [1860] => array('2011-08-12', '2011-08-13'),
        [1861] => array('2011-08-12', '2011-08-13')
    ),
    ['Hotel Beta'] => array(
        [1226] => array('2011-08-12', '2011-08-13'),
        [1227] => array('2011-08-12', '2011-08-13')
    )
)

これは、作業がはるかに簡単で、あなたが望んでいるように見えるものにはるかに近いはずです。

于 2011-01-23T05:26:41.163 に答える