2013-02-13 128 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); 
?> 
相关问题