1

i need to merge two associative arrays which may or may not contain same key,if key is same the values need to added and stored in the resultant array

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

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

how to add the above two associative arrays and receive the following output/associative array -

 $array2 = array(
      'a' => 105,
      'b' => 10,
      'c' => 206,
      'd' => 30,
      'k' => 20
    );
Mayur
  • 291
  • 1
  • 3
  • 16

5 Answers5

4

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);
Tamil Selvan C
  • 19,913
  • 12
  • 49
  • 70
  • Works fine...Thanks a lot !! ...However,could you plz explain a bit about the following part- (isset($array1[$key]) ? $array1[$key] : 0) – Mayur Apr 20 '13 at 10:36
  • If you think it works you should accept his answer Mayur – antony Apr 20 '13 at 10:55
  • @antony--i accept Tamil Selvan's answer...just wanted a little explaination about (isset($array1[$key]) ? $array1[$key] : 0) as I am new to PHP and also programming. – Mayur Apr 20 '13 at 10:58
  • @Mayur You haven't accepted it. You have to click on the tick. If you want to learn about shorthand conditional statements then ask another question or read here http://davidwalsh.name/php-ternary-examples. – antony Apr 20 '13 at 11:19
  • Gentlemen,its accepted now...!!! (m new to stackoverflow.com,so dint know..SORRY) – Mayur Apr 20 '13 at 11:28
1

for finding unique index value

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

and for finding unique value you can try

$array2 =array_unique(array_merge($array1,$array2));
Yadav Chetan
  • 1,874
  • 2
  • 23
  • 43
1
$a3 = array_merge_recursive ($array1, $array2);
foreach ($a3 as $key => $value)
{
    $a3[$key] = (is_array($value))?array_sum($value):$value;
}
Amit
  • 1,365
  • 8
  • 15
0

I don't know if you can do this with an internal function but it is doable by simply iterating through both arrays.

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

The & will cause passing by reference

kero
  • 10,647
  • 5
  • 41
  • 51
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);
antony
  • 2,763
  • 19
  • 23