2016-05-24 14 views
0

長さと要素が異なる02個の配列があります。次のように生成結果は異なる長さの配列によるループループ

foreach($activeRsrvs as $actvRsrv) 
{ 
    foreach($allRooms as $room) 
    { 
     if($actvRsrv['hotelrooms_hotelroomsid'] !== $room['hotelroomsid']) 
     { 
      $output[] = $room; 
     } //end if 
    } //end inner loop 
}//end outer loop 

[{"hotelroomsid":"2","roomno":"02"},{"hotelroomsid":"3","roomno":"50"},{"hotelroomsid":"4","roomno":"15"},{"hotelroomsid":"1","roomno":"01"},{"hotelroomsid":"2","roomno":"02"},{"hotelroomsid":"4","roomno":"15"}] 

しかし、私はそれが次の結果を返す必要がありますしたい:

$activeRsrvs = [{"reservation_reservationid":"KHAN2016Q221","hotelrooms_hotelroomsid":"1","status":"active"},{"reservation_reservationid":"KHAN2016Q223","hotelrooms_hotelroomsid":"3","status":"active"}] 

$allRooms = [{"hotelroomsid":"1","roomno":"01"},{"hotelroomsid":"2","roomno":"02"},{"hotelroomsid":"3","roomno":"50"},{"hotelroomsid":"4","roomno":"15"}] 

次のように私のコードは次の通り配列は、

[{"hotelroomsid":"2","roomno":"02"},{"hotelroomsid":"4","roomno":"15"}] 

Th eループは誤って6つの要素を返し、02要素だけが返されるようにします。親切に私を助けてください。

答えて

1

私は最も簡単な方法は、一時配列にすべての部屋を追加し、彼らは一時配列

編集中に存在する場合はループ内でそれらの設定を解除することだと思う:ソリューションを貼り付けるにコピー;)

$tmp = array(); 
foreach($allRooms as $room) { 
    $tmp[$room['hotelroomsid']] = $room; 
} 
foreach($activeRsrvs as $actvRsrv) 
{ 
    foreach($allRooms as $room) 
    { 
     if($actvRsrv['hotelrooms_hotelroomsid'] === $room['hotelroomsid']) 
     { 
      if(array_key_exists($room['hotelroomsid'], $tmp)) { 
       unset($tmp[$room['hotelroomsid']]); 
      } 
     } //end if 
    } //end inner loop 
}//end outer loop 
$output = array_values($tmp); 
+0

[]空の配列を返します。 –

+0

sry;)私は!==を===に変更するのを忘れてしまった。今は期待どおりに動作します。私の失敗 – Andre

+0

素晴らしい!愛する兄弟に感謝します。あなたは本当に頭痛を解決しました。どうもありがとう! –

関連する問題