1

申し訳ありませんが、これをもう一度尋ねる必要がありましたが、この配列を処理しようとして問題が発生しました。私はいくつかの異なる方法を試しましたが、正しいところはありません。ここに配列があります。

Array ( 
  [search] => Array ( 
    [response] => Array ( 
      [errors] => 
      [number_of_hotels] => 1 of 1 
    ) 
    [lr_rates] => Array ( 
      [hotel] => Array  ( 
        [hotel_ref] => 3116 
        [hotel_currency] => [U] => USD 
        [hotel_rooms] => Array ( 
          [room] => Array ( 
            [ref] => 6382 
            [type] => 1 
            [type_description] => Standard 
            [sleeps] => 8 
            [rooms_available] => 
            [adults] => 8 
            [children] => 
            [breakfast] => false 
            [dinner] => false 
            [description] => 
            [alternate_description] => 
            [rack_rate] => 82.01 
            [date] => 19/08/201220/08/201221/08/2012
            [numeric_hotelcurrencyprice] => FullFullFull
            [formatted_date] => 19 August 201220 August 201221 August 2012 
            [price] => FullFullFull
            [hotelcurrencyprice] => FullFullFull 
            [numeric_price] => FullFullFull
            [requested_currency] => GBPGBPGBP 
            [numeric_hotelcurrencyprice] => FullFullFull
            [available_online] => false 
            [minimum_nights] => 1 
            [bed_type] => 
            [cancellation_policy] => 
            [cancellation_days] => 
            [cancellation_hours] => 
            [room_terms] => 
          )
          [room] => Array ( 
            [ref] => 6382 
            [type] => 1 
            [type_description] => Standard 
            [sleeps] => 8 
            [rooms_available] => 
            [adults] => 8 
            [children] => 
            [breakfast] => false 
            [dinner] => false 
            [description] => 
            [alternate_description] => 
            [rack_rate] => 82.01 
            [date] => 19/08/201220/08/201221/08/2012
            [numeric_hotelcurrencyprice] => FullFullFull
            [formatted_date] => 19 August 201220 August 201221 August 2012 
            [price] => FullFullFull
            [hotelcurrencyprice] => FullFullFull 
            [numeric_price] => FullFullFull
            [requested_currency] => GBPGBPGBP 
            [numeric_hotelcurrencyprice] => FullFullFull
            [available_online] => false 
            [minimum_nights] => 1 
            [bed_type] => 
            [cancellation_policy] => 
            [cancellation_days] => 
            [cancellation_hours] => 
            [room_terms] => 
          )
        ) 
        [cancellation_type] => First Night Stay Chargeable 
        [cancellation_policy] => 2 Days Prior to Arrival 

        [CityTax] => Array ( 
          [TypeName] => 
          [Value] => 
          [OptedIn] => 
          [IsCityTaxArea] => 
        )
      )
    )
  ) 
)

OK、配列をトラバースしてループを作成する必要があるので、ROOMのすべてのインスタンスに対してプロセスを繰り返します。次に、部屋の配列からデータを抽出し、それを使用して部屋のインスタンスごとにMySQLの行にデータを入力する必要があります。

これは私がこれまでに持っているコードで、部屋の配列に名前と値を出力します。ただし、ルーム配列の1つのみを取得します。すべての部屋を読むにはどうすればよいですか?また、これは多すぎると思います-それぞれですが、[''] ['']['']...または単に連想名を使用するだけではトラバースできないようです。

foreach($arr['search'] as $lr_rates) {
        foreach($lr_rates['hotel'] as $hotel) {
                   foreach($hotel['room'] as  $field => $value){
                     print $field;print $value;
                          }

             }
      }

これらの配列の値は常に変動していることにも言及する価値があるかもしれません。

4

2 に答える 2

3

この見積もりを少し単純化できると思います。これが常に構造であることがわかっている場合は、ホテルにジャンプしてから部屋にジャンプできます。

foreach($arr['search']['lr_rates']['hotel'] as $hotel) {
      // You can access all of the keys in the hotel array here

      foreach($hotel['hotel_rooms'] as $room) {
          // Do stuff with the room array
      }  
}

挿入スクリプトをその場で作成し、書き込みのためにデータベースを1回だけ呼び出すか、更新する場合はトランザクションを使用することをお勧めします。部屋の数が増えると、ディスクへの大量の書き込みによってスクリプトの速度が低下します。

于 2012-08-20T17:59:27.793 に答える
2

データの出力のフォーマットは非常に悪く、判読できません。私はあなたが何をしようとしているのか本当に特定できません。

  1. 可能性:内部配列[hotel_rooms] => Array ()はキーをroom複数回使用します。配列キーは一意であるため、インデックスのデータを上書きしますroom。これが、部屋が1つしかない理由です。

  2. 可能性:rooms内部にroom->再帰関数を使用して、次のようにすべての部屋を反復処理します。

    function handleRoom(array $room) {
    
        // do something with $room
    
        if (array_key_exists('room', $room)) {
    
            handleRoom($room['room']);
        }
    }
    
    $room = array(
        'some' => 'room',
        'data' => 'and another',
        'room' => array(
            'is' => 'inside',
            'of the' => 'main room',
        ),
    );
    
    handleRoom($room);
    
于 2012-08-20T18:00:48.967 に答える