2016-04-23 178 views
1

嘗試使用相同數字鍵合併兩個數組有困難。我試過array_merge()array_merge_recursive(),但似乎要做的就是追加第二個數組。合併具有相同數字鍵的兩個PHP數組

第一個數組有以下形式:

Array 
(
    [384] => Array 
     (
      [name] => SomeMovieName1 
      [age] => 12.2 hrs 
      [IMDBLink] => 
      [IMDBRating] => 
      [coverArt] => 
     ) 

    [452] => Array 
     (
      [name] => SomeMovieName2 
      [age] => 13.1 hrs 
      [IMDBLink] => 
      [IMDBRating] => 
      [coverArt] => 
     ) 

    [945] => Array 
     (
      [name] => SomeMovieName3 
      [age] => 13.6 hrs 
      [IMDBLink] => 
      [IMDBRating] => 
      [coverArt] => 
     ) 
) 

這裏是第二陣列我想結合/與第一合併:

Array 
(
    [384] => Array 
     (
      [IMDBRating] => 7.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie1 
      [coverArt] => http://www.SomeLinkToCoverArt.com/1 
     ) 

    [452] => Array 
     (
      [IMDBRating] => 8.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie2 
      [coverArt] => http://www.SomeLinkToCoverArt.com/2 
     ) 

    [945] => Array 
     (
      [IMDBRating] => 6.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie3 
      [coverArt] => http://www.SomeLinkToCoverArt.com/3 
     ) 
) 

和合並後,我想結果是:

Array 
(
    [0] => Array 
     (
      [name] => SomeMovieName1 
      [age] => 12.2 hrs 
      [IMDBRating] => 7.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie1 
      [coverArt] => http://www.SomeLinkToCoverArt.com/1 
     ) 

    [1] => Array 
     (
      [name] => SomeMovieName2 
      [age] => 13.1 hrs 
      [IMDBRating] => 8.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie2 
      [coverArt] => http://www.SomeLinkToCoverArt.com/2 
     ) 

    [2] => Array 
     (
      [name] => SomeMovieName3 
      [age] => 13.6 hrs 
      [IMDBRating] => 6.2 
      [IMDBLink] => http://www.imdb.com/LinkToMovie3 
      [coverArt] => http://www.SomeLinkToCoverArt.com/3 
     ) 
) 

不知道是否由於內部數組導致的問題,它的w不直接與array_merge()array_merge_recursive()合作。任何幫助,將不勝感激,

謝謝。

+0

爲什麼合併後的陣列從改變其$鍵值'[384] [452] [945]'來'[0] [1] [2]' ? – Webeng

+0

我正在使用我分配給兩個數組中的每個鍵的ID字段,以便稍後將它們組合起來時,我可以使用鍵來知道哪些IMDB/etc元素與稍後的內容組合在一起。我確信我可以用不同的方式做到這一點,但這是我腦海中嘗試的第一個想法。 – Wallboy

回答

2

你可以嘗試下面的代碼來合併數組。代碼生成您需要的所需輸出。我用樣品陣列由你給出:

<?php 
    $arr1=array(
     "384"=>array("name"=>"SomeMovieName1","age"=>"12.2 hrs","IMDBLink"=>"","IMDBRating"=>"", "coverArt"=>""), 
     "452"=>array("name"=>"SomeMovieName2","age"=>"15.2 hrs","IMDBLink"=>"","IMDBRating"=>"", "coverArt"=>""), 
     "954"=>array("name"=>"SomeMovieName3","age"=>"4.2 hrs","IMDBLink"=>"","IMDBRating"=>"", "coverArt"=>"") 
    ); 
    $arr2=array(
     "384" => array("IMDBLink" => "7.2", "IMDBRating" => "http://www.imdb.com/LinkToMovie1", "coverArt" => "http://www.SomeLinkToCoverArt.com/1"), 
     "452" => array("IMDBLink" => "5","IMDBRating" => "http://www.imdb.com/LinkToMovie2", "coverArt" => "http://www.SomeLinkToCoverArt.com/2"), 
     "954"=>array("IMDBLink" => "8","IMDBRating" => "http://www.imdb.com/LinkToMovie3", "coverArt" => "http://www.SomeLinkToCoverArt.com/3") 
    ); 
    $arr3 = array(); 
    foreach($arr1 as $key=>$val) 
    { 
     $arr3[] = array_merge($val, $arr2[$key]); 
    } 
    echo "<pre>"; 
    print_r($arr3); 
?> 
+0

謝謝,這是完美的作品。我的直覺告訴我,我可能需要用foreach循環訪問數組,並使用'array_merge()' – Wallboy

0

在foreach循環中運行數組可能更容易,只需將每個值插入到初始數組中即可。讓我們稱之爲第一陣列$myFirstArray和第二陣列$mySecondArray

foreach ($myFirstArray as $key => $value) 
{ 
    $myFirstArray[$key][IMDBRating] = $mySecondArray[$key][IMDBRating]; 
    $myFirstArray[$key][IMDBLink] = $mySecondArray[$key][IMDBLink]; 
    $myFirstArray[$key][coverArt] = $mySecondArray[$key][coverArt]; 
} 
0

沒有測試這一點,但它應該工作:

打電話給你的第一陣列$ AR1和第二$ AR2

$result=array(); 
foreach($ar1 as $k=>$v) 
{ 
//if there is a corresponding array2 element 
if(isset($ar2[$k])){ 
     $result[] = array($v['name], $v['age'], $ar2[$k]['IMDBLink'], $ar2[$k]['IMDBRating'],$ar2['coverArt']); 
} 
} 

//result 
print_r($result); 
0

array_merge_recursive不起作用,因爲你的外部數組有數字鍵而不是字符串鍵。當給array_mergearray_merge_recursive賦予數值數組時,它們會追加它們而不是使用相同的鍵合併元素。

相反,您可以映射數組併合並相應的元素。

$result = array_map('array_merge', $array1, $array2); 

請注意,此代碼假定兩個輸入數組具有相同順序的所有相同的鍵。如果它們的順序不同,則可以先使用ksort重新排列它們。

但是,如果他們可以有不同的鍵,你需要一個不同的解決方案,就像Webang的答案中的循環。

+0

這兩個數組可能有不同的鍵順序,但我想我可以在使用您的解決方案之前對它們進行排序。感謝您的意見。 – Wallboy

相關問題