2012-05-25 51 views
4

我有2個陣列合併2個陣列通過附加價值

$a = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>4); 

$b = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>5); 

我如何將它們合併到這樣一個數組:

Array 
(
    [v1] => 1 
    [v2] => 2 
    [v3] => 3 
    [v4] => Array 
     (
      [0] => 4 
      [1] => 5 
     ) 
) 

我一直在使用array_merge & array_merge_recursive嘗試。

+2

我不認爲有任何內置的命令,你想要在一個鏡頭是什麼? –

+0

我不是在找一個要麼,我只是在尋找最短的方式可能。 – karthik

+0

好吧,試試Samy的解決方案然後:) –

回答

3

您可以使用此代碼:

$a = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>4); 
$b = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>5); 
$c = array(); 
foreach($a as $m => $n) { 
    if (($b[$m] != $n)) 
     $c[$m] = array($n, $b[$m]); 
    else 
     $c[$m] = $n; 
} 
1
$a = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>4); 
$b = array('v1'=>1,'v2'=>2,'v3'=>3,'v4'=>5); 
$results = array(); 

foreach ($a as $key=>$elem) { 
    $results[$key][] = $elem; 
    if (!in_array($b[$key], $results[$key])) { 
    $results[$key][] = $b[$key]; 
    } 
} 
+1

不好,你會有v1 => array(1) – Gavriel

+0

對不起,沒有注意到。 –

+0

仍然沒有,請參閱@ anubhava的解決方案 – Gavriel

3
$result = array_intersect_assoc($a, $b); 

foreach (array_diff_assoc($a, $b) as $k => $v) 
    $result[$k] = array($v, $b[$k]); 

更新:
anubhava的解決方案是好的。它可以簡化如下:

$c = array(); 
foreach($a as $k => $v) 
    $c[$k] = $b[$k] == $v ? $v : array($v, $b[$k]); 
+0

聰明的一個。從你的學習了2個新的內置函數:) – karthik