一個快速的方法是遍歷第一陣列和第二附加價值:
$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
是陣列中的實際索引,但由於示例數組輸出同時具有Name
和Content
,我假設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;
(它應該合併所有不存在的索引)。
你只是想給兩個字符串相同ID的連接爲一個字符串,或者是你想在本質上具有多個值的一個關鍵? – 2012-07-24 15:16:12
array_merge/addition不會更改數組的維數。如果你喂兩個1x10陣列,你最終會得到1x20,而不是2x10或4x5或其他。 – 2012-07-24 15:18:26
我終於通過改變SQL查詢來解決這個問題。好像php不適合處理複雜的數組。 :-( – user1548619 2012-07-24 16:50:21