1

我需要合并两个可能包含或不包含相同键的关联数组,如果键相同,则需要添加并存储在结果数组中的值

 $array1 = array(
      'a' => 5,
      'b' => 10,
      'c' => 6,
      'k' = > 10
    );

$array2 = array(
  'a' => 100,
  'c' => 200,
  'd' => 30,
  'k' => 10
);

如何添加上述两个关联数组并接收以下输出/关联数组 -

 $array2 = array(
      'a' => 105,
      'b' => 10,
      'c' => 206,
      'd' => 30,
      'k' => 20
    );
4

5 回答 5

4

尝试

 $array1 = array(
      'a' => 5,
      'b' => 10,
      'c' => 6,
      'k' => 10
    );

$array2 = array(
  'a' => 100,
  'c' => 200,
  'd' => 30,
  'k' => 10
);

$sums = array();
foreach (array_keys($array1 + $array2) as $key) {
    $sums[$key] = (isset($array1[$key]) ? $array1[$key] : 0) + (isset($array2[$key]) ? $array2[$key] : 0);
}

print_r($sums);
于 2013-04-20T10:18:12.590 回答
1

用于查找唯一索引值

$array2 =array_merge($array1,$array2);

为了找到独特的价值,您可以尝试

$array2 =array_unique(array_merge($array1,$array2));
于 2013-04-20T10:19:21.477 回答
1
$a3 = array_merge_recursive ($array1, $array2);
foreach ($a3 as $key => $value)
{
    $a3[$key] = (is_array($value))?array_sum($value):$value;
}
于 2013-04-20T10:28:26.767 回答
0

我不知道您是否可以使用内部函数执行此操作,但只需遍历两个数组即可。

function merge_add($array1, $array2)
{
    $result = array();
    merge_add_array($array1, $result);
    merge_add_array($array2, $result);
    return $result;
}

function merge_add_array($array, &$result)
{
    foreach ($array as $key=>$value)
    {
        if (array_key_exists($key, $result))
        {
            $result[$key] += $value;
        }
        else
        {
            $result[$key] = $value;
        }
    }
}

$result = merge_add($array1, $array2);

&导致通过引用传递

于 2013-04-20T10:19:27.923 回答
0
<?php
$array1 = array(
      'a' => 5,
      'b' => 10,
      'c' => 6,
      'k' => 10
    );

$array2 = array(
  'a' => 100,
  'c' => 200,
  'd' => 30,
  'k' => 10
);

$keys = array_keys($array1 + $array2);

foreach ($keys as $key) {
    $array2[$key] = isset($array1[$key]) && isset($array2[$key]) ? ($array1[$key] + $array2[$key]) : (isset($array1[$key]) ? $array1[$key] : $array2[$key]);
}

print_r($array2);
于 2013-04-20T10:29:05.023 回答