4

我有 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

4

3 回答 3

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;
}
于 2012-05-25T08:30:03.337 回答
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]);
于 2012-05-25T08:38:55.757 回答
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];
  }
}
于 2012-05-25T08:26:23.410 回答