2013-02-13 47 views
0

我需要一個合併兩個數組的幫助。比方說,我有以下陣列:使用相同的鍵合併兩個陣列

Array 
(
[3] => Array 
    (
     [id] => 3 
     [name] => Lorem 
     [type] => pl 
    ) 

[2] => Array 
    (
     [id] => 2 
     [name] => Ipsum 
     [type] => pl 
    ) 

) 

,第二個:

Array 
(
    [6] => Sit dolor 
    [4] => nostrud exercitation ullamco 
    [3] => uuntur magni dolores 
    [2] => corporis suscipit laboriosam 
    [7] => quia non numquam eius modi tempora 
) 

和期望的輸出是:

Array 
(
[3] => Array 
    (
     [id] => 3 
     [name] => Lorem 
     [type] => pl 
     [new_key] => uuntur magni dolores 
    ) 

[2] => Array 
    (
     [id] => 2 
     [name] => Ipsum 
     [type] => pl 
     [new_key] => corporis suscipit laboriosam 
    ) 
) 

我一直在試圖與array_diff_key()方法,而不是比較數組在一些循環中合併數組,但我不能使它工作。有沒有內置的PHP函數,或者我應該寫我自己的?如果是這樣,你能幫我取得理想的結果嗎?任何幫助深表感謝。

+0

你嘗試'array_merge_recursive'? – 2013-02-13 12:12:53

回答

2

你可以簡單地在第一個數組遍歷:

foreach ($arr1 as $key=> $item) { 
    $arr1[$key]['new_key'] = isset($arr2[$item['id']]) ? $arr2[$item['id']] : ''; 
} 

或者

foreach ($arr1 as &$item) { //just for fun 
    $item['new_key'] = isset($arr2[$item['id']]) ? $arr2[$item['id']] : ''; 
} 

但似乎你的數據來自數據庫。如果我是對的,你最好使用sql JOIN

0

你可以簡單的做這樣也

foreach($arr1 as $key => $arr) { 

     $arr1[$key]['new_key'] = isset($arr2[$key])?$arr2[$key]:''; 
} 
5

所有你需要的是

$data = array_map(function ($v) use($new) { 
    isset($new[$v['id']]) and $v['new_key'] = $new[$v['id']] ; 
    return $v; 
}, $data); 

var_dump($data); 

輸出(DEMO

array (size=2) 
    3 => 
    array (size=4) 
     'id' => int 3 
     'name' => string 'Lorem' (length=5) 
     'type' => string 'pl' (length=2) 
     'new_key' => string 'uuntur magni dolores' (length=20) 
    2 => 
    array (size=4) 
     'id' => int 2 
     'name' => string 'Ipsum' (length=5) 
     'type' => string 'pl' (length=2) 
     'new_key' => string 'corporis suscipit laboriosam' (length=28) 
+0

+1,因爲這是正確的答案,但我反對這種做法。首先,它比_traditional one_更不可讀。其次,如果另一位缺乏PHP經驗的開發者不得不分析這個問題,他會花費寶貴的時間。 ;)無論如何,這是OP想要的。 – Leri 2013-02-13 12:23:09

+0

是的,這是一個有趣的解決方案,但我是開發者,它花了我一些時間來理解它。我從來沒有在PHP中使用過匿名函數。 – user1292810 2013-02-14 21:53:52

0
<?php 
$first_array = Array("3" => Array("id" => 3,"name" => "Lorem","type" => "pl"), 
         "2" => Array("id" => 2,"name" => "Ipsum","type" => "pl") 
        ); 

$sec_array = Array("6" => "Sit dolor", 
        "4" => "nostrud exercitation ullamco", 
        "3" => "uuntur magni dolores", 
        "2" => "corporis suscipit laboriosam", 
        "7" => "quia non numquam eius modi tempora", 
       ); 

$res_array = array(); 
foreach($first_array as $key=>$val){ 
    if(array_key_exists($key,$sec_array)){ 
     $val["new_key"] = $sec_array[$key]; 
    } 
    $res_array[$key] = $val; 
} 

echo "<pre>"; 
print_r($res_array); 
?> 
相關問題