【问题标题】:Merge 2 arrays by appending values通过附加值合并 2 个数组
【发布时间】:2012-05-31 19:58:39
【问题描述】:

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

【问题讨论】:

  • 我认为没有任何内置命令可以满足您的需求...
  • 我也不是在找一个,我只是在寻找可能的最短路径。
  • 哦,好吧,然后试试 Samy 的解决方案 :)

标签: php arrays merge


【解决方案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];
  }
}

【讨论】:

  • 是的,抱歉,没注意到。
  • 还是不行,看@anubhava的解决方案
【解决方案2】:

您可以使用此代码:

$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;
}

【讨论】:

    【解决方案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]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2020-02-29
      • 1970-01-01
      相关资源
      最近更新 更多