2012-07-24 89 views
0

我需要比較PHP中的兩個二維數組。該陣列是這樣的:在PHP中結合使用兩個數組的ID

Array one 
ID Name 
11 Aa 
11 Ab 
12 Bb 
13 Cc 
14 Dd 
15 Ee 

Array two 
ID Content 
11 Cat 
13 Dog 
14 Donkey 

現在我需要這兩個組合成一個這樣的數組:

ID Name Conent 
11 Aa Cat 
11 Ab Cat 
12 Bb 
13 Cc Dog 
14 Dd Donkey 
15 Ee 

我怎樣才能做到這一點?我沒有運氣與array_merge()或$ array3 = $ array1 + $ array2;

+1

你只是想給兩個字符串相同ID的連接爲一個字符串,或者是你想在本質上具有多個值的一個關鍵? – 2012-07-24 15:16:12

+0

array_merge/addition不會更改數組的維數。如果你喂兩個1x10陣列,你最終會得到1x20,而不是2x10或4x5或其他。 – 2012-07-24 15:18:26

+0

我終於通過改變SQL查詢來解決這個問題。好像php不適合處理複雜的數組。 :-( – user1548619 2012-07-24 16:50:21

回答

0

你將不得不作出自己的函數:

function putThemTogether($array1, $array2) { 
    $output = array(); 
    foreach($array1 as $key => $value) { 
     if (!isset($output[$key])) 
      $output[$key] = array(); 
     $output[$key][] = $value; 
    } 
    foreach($array2 as $key => $value) { 
     if (!isset($output[$key])) 
      $output[$key] = array(); 
     $output[$key][] = $value; 
    } 
    return $output; 
} 

爲了使這個更好的,你可以把它取的參數任意數量。

3

一個快速的方法是遍歷第一陣列和第二附加價值:

$array1 = array('11' => 'Aa', '12' => 'Bb', '13' => 'Cc', '14' => 'Dd', '15' => 'Ee'); 
$array2 = array('11' => 'Cat', '13' => 'Dog', '14' => 'Donkey'); 

$combined = array(); 
foreach ($array1 as $key => $val) { 
    $combined[$key] = $val . (isset($array2[$key]) ? ' '.$array2[$key] : ''); 
} 

通過$array1每個鍵/值。這樣就會循環,並將其添加到$combined陣列。如果$array2中的值存在且索引相同,則它會將其附加到$array1的值中,並用空格分隔。

更新:我誤讀了數組的格式(再次)。我假設ID是陣列中的實際索引,但由於示例數組輸出同時具有NameContent,我假設ID是實際的索引字符串值,而不是數組本身的索引。要堅持用循環情景,您可以通過第一個數組進行迭代,並有一個嵌套循環迭代通過第二:

$array1 = array(
     array('ID' => '11', 'Name' => 'Aa'), 
     array('ID' => '12', 'Name' => 'Bb'), 
     array('ID' => '13', 'Name' => 'Cc'), 
     array('ID' => '14', 'Name' => 'Dd'), 
     array('ID' => '15', 'Name' => 'Ee'), 
    ); 
$array2 = array(
     array('ID' => '11', 'Content' => 'Cat'), 
     array('ID' => '13', 'Content' => 'Dog'), 
     array('ID' => '14', 'Content' => 'Donkey') 
    ); 

$combined = array(); 
foreach ($array1 as $arr) { 
     $comb = array('ID' => $arr['ID'], 'Name' => $arr['Name'], 'Content' => ''); 
     foreach ($array2 as $arr2) { 
      if ($arr2['ID'] == $arr['ID']) { 
       $comb['Content'] = $arr2['Content']; 
       break; 
      } 
     } 
    $combined[] = $comb; 
} 

這將在$array1添加的每個值的組合陣列和,當且僅當,一值$array2包含相同的ID字段,它會將它的Content字段也添加到數組中。這可以擴展爲處理任意數量的字段,無論是通過名稱,還是通過更改inner-if塊來代替$comb += $arr2;(它應該合併所有不存在的索引)。

0
$result = array_map (
    function ($item) { return is_array($item) ? implode(' ', $item) : $item; }, 
    array_merge_recursive($array1, $array2); 
); 

注意,這兩個陣列需要字符串鍵