2016-06-18 10 views
2

私はその配列に配列を持っていますが、要素をマージしたいのですが、条件が "キー"のキーが他の要素の "ホテル"とマッチした場合です。例については

MyArrayというキーの値が一致する配列の要素をマージする方法

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [HotelCode] => ASSOC01 
        [Price] => Array 
         (
          [RoomPrice] => 200 
         ) 
       ) 

      [1] => Array 
       (
        [HotelCode] => ASSOC02 
        [Price] => Array 
         (
          [RoomPrice] => 210 
         ) 
       ) 

      [2] => Array 
       (
        [HotelCode] => ASSOC03 
        [Price] => Array 
         (
          [RoomPrice] => 220 
         ) 
       ) 
      [3] => Array 
       (
        [HotelCode] => ASSOC04 
        [Price] => Array 
         (
          [RoomPrice] => 230 
         ) 
       ) 
     ) 

    [1] => Array 
     (

      [0] => Array 
       (
        [HotelCode] => ASSOC02 
        [Price] => Array 
         (
          [RoomPrice] => 310 
         ) 
       ) 

      [1] => Array 
       (
        [HotelCode] => ASSOC01 
        [Price] => Array 
         (
          [RoomPrice] => 300 
         ) 
       ) 



      [2] => Array 
       (
        [HotelCode] => ASSOC03 
        [Price] => Array 
         (
          [RoomPrice] => 320 
         ) 
       ) 

      [3] => Array 
       (
        [HotelCode] => ASSOC04 
        [Price] => Array 
         (
          [RoomPrice] => 330 
         ) 
       ) 
     ) 

    [2] => Array 
     (

      [0] => Array 
       (
        [HotelCode] => ASSOC03 
        [Price] => Array 
         (
          [RoomPrice] => 420 
         ) 
       ) 

      [1] => Array 
       (
        [HotelCode] => ASSOC01 
        [Price] => Array 
         (
          [RoomPrice] => 400 
         ) 
       ) 

      [3] => Array 
       (
        [HotelCode] => ASSOC02 
        [Price] => Array 
         (
          [RoomPrice] => 410 
         ) 
       ) 

     ) 
) 



MyArrayという

配列iは、アレイ上にしたいのですが、条件は私がチェックする必要があることを複数のアレイがありますHotelCodeキーの値が一致しているかどうか一致しているかどうかを確認します。アレイ以下のように

Array 
(

    [0] => Array 
     (
      [HotelCode] => ASSOC01 
      [Room] => Array 
       (
        [0] => Array 
         (
          [RoomPrice] => 200 
         ) 
        [1] => Array 
         (
          [RoomPrice] => 300 
         ) 
        [2] => Array 
         (
          [RoomPrice] => 400 
         ) 
       ) 
     ) 

    [1] => Array 
     (
      [HotelCode] => ASSOC02 
      [Room] => Array 
       (
        [0] => Array 
         (
          [RoomPrice] => 210 
         ) 
        [1] => Array 
         (
          [RoomPrice] => 310 
         ) 
        [2] => Array 
         (
          [RoomPrice] => 410 
         ) 
       ) 
     ) 

    [2] => Array 
     (
      [HotelCode] => ASSOC03 
      [Room] => Array 
       (
        [0] => Array 
         (
          [RoomPrice] => 220 
         ) 
        [1] => Array 
         (
          [RoomPrice] => 320 
         ) 
        [2] => Array 
         (
          [RoomPrice] => 420 
         ) 
       ) 
     ) 
) 



上記アレイでは、あなたは私が何をしたか見ることができます。

MyArray[0][0][HotelCode], MyArray[1][1][HotelCode] and MyArray[2][1][HotelCode] values are same then i kept in an array 

しかし、あなたはあなたの質問が何であるか全くわからない

MyArray[0][3][HotelCode] and MyArray[1][3][HotelCode] are same but that "HotelCode" value is not available in MyArray[2] than i just left it. 
+0

Array_mergeは私があなたのために – CiroRa

+0

あなたのためです試してみてください。 – User97798

答えて

1

あなたはこの

$array = array(...); // Your MyArray data 
$Temp_array = []; 
// Merging array here 
foreach($array as $value) { 
    foreach($value as $key1 => $value1) { 
     $Temp_array[$value1['HotelCode']][$key1] = $value1; 
     $Temp_array[$value1['HotelCode']]['Room'][] = $value1['Price']; 
     unset($Temp_array[$value1['HotelCode']]['Price']); 
    } 
} 

$Temp_array2 = array_values($Temp_array); 

// Removing Incompete array Here 
$Final_Result_Array = []; 

foreach ($Temp_array2 as $key2 => $value2) { 
    if (count($array) == count($value1['Room'])) { 
     $Final_Result_Array[] = $value2; 
    } 
} 

echo '<pre>'; 
print_r($Final_Result_Array); 
echo '</pre>'; 
2

を見ることができますが、あなただけの部屋の価格は、ホテル・コードによってグループ化されているアレイを構築したい場合、などあなたはこれを行うことができます。

$data = ...; // The original MyArray data 
$mergedData = []; 

foreach($data as $hotelPrices) { 
    foreach($hotelPrices as $roomPrice) { 
     $hotelCode = $roomPrice['HotelCode']; 
     $mergedData[$hotelCode]['HotelCode'] = $hotelCode; 
     $mergedData[$hotelCode]['Room'][] = $roomPrice['Price']; 
    } 
} 

// If the array must be numerically indexed 
$numericIndexedData = array_values($mergedData); 

このコードはHotelCodeでインデックス化新しい配列を構築し、すべての部屋pを追加しますそれに穀物。最後の行は、HotelCodeインデックスキーを削除します。

+0

あなたは、配列についてファンタスティックにアイデアを与えている、ビッグ感謝を試してみましたので、array_merge()でのforeachする必要がありますか – User97798

関連する問題