在PHP中添加两个不同关联数组的值.在结果数组中也显示唯一的键值


add the values of two different associative arrays in php . display unique key-values too in the result array

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

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

Try

 $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);
$a3 = array_merge_recursive ($array1, $array2);
foreach ($a3 as $key => $value)
{
    $a3[$key] = (is_array($value))?array_sum($value):$value;
}

查找唯一索引值

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

和查找唯一值可以尝试

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

我不知道你是否可以用一个内部函数来做到这一点,但它是可以通过简单地遍历两个数组。

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);

&将导致通过引用传递

<?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);