-1

Array

[0] => Array
    (
        [a1] => 12
        [v1] => 3100.00
        [v2] => 186.00
        [v3] => 186.00
    )

[1] => Array
    (
        [a1] => 12
        [v1] => 1200.00
        [v2] => 72.00
        [v3] => 72.00
    )

i want to create new array from this array which is look like this as given below it should give me '12' common and add other values

Array

[0] => Array
    (
        [a1] => 12
        [v1] => 4300.00
        [v2] => 258.00
        [v3] => 258.00
    )

4 Answers4

1
Try This code ,
foreach($value as $i=>$v) {
    $temp[0]['a1'] = $v['a1'];
    $temp[0]['v1'] += $v['v1'];
    $temp[0]['v2'] += $v['v2'];
    $temp[0]['v3'] += $v['v3'];

}
Kmg Kumar
  • 587
  • 2
  • 20
0

Please find below code:

<?php
        $merged = array();
        $res =  array('a1'=>12,'v1'=>3100.00,'v2'=>186.00,'v3'=>186.00);
        $res1 = array('a1'=>12,'v1'=>1200.00,'v2'=>72.00,'v3'=>72.00);

        foreach ([$res, $res1] as $a) {                             // iterate both arrays
            foreach ($a as $key => $value) {                     // iterate all keys+values
                $merged[$key] = $value + (isset($merged[$key]) ? $merged[$key] : 0);   // merge and add
            }
        }

    print "<pre>";
    print_r($merged); 
    die;
    ?>
Ankit Sompura
  • 765
  • 6
  • 10
0

It's a bit unclear the real your needs, so this solution only one of a few possible solutions.

This script a1 element is using as key, so it will work with more than one a1 value.

Example:

<?php
$a = [
    [
        'a1' => 12,
        'v1' => 3100.00,
        'v2' => 186.00,
        'v3' => 186.00,
    ],
    [
        'a1' => 12,
        'v1' => 1200.00,
        'v2' => 72.00,
        'v3' => 72.00,
    ],
    [
        'a1' => 13,
        'v1' => 2100.00,
        'v2' => 386.00,
        'v3' => 386.00,
    ],
    [
        'a1' => 13,
        'v1' => 1200.00,
        'v2' => 72.00,
        'v3' => 72.00,
    ]
];

$r = [];
foreach ($a as $item) {
    $key = $item['a1'];
    if (empty($r[$key]))
        $r[$key] = $item;
    else {
        foreach ($item as $k => $v) {
            if ($k !== 'a1')
                $r[$key][$k] = empty($r[$key][$k]) ? $item[$k] : $r[$key][$k] + $item[$k];
        }
    }
}

print_r(array_values($r));
Neodan
  • 5,154
  • 2
  • 27
  • 38
-1

A simple foreach loop can do it.

$result = array();
foreach($yourArray as $arr){
    foreach($arr as $i=>$v) {
        if(!isset($result[$i])) {
            $result[$i] = 0;
        }
        if($i == 'a1'){ 
            $result[$i] = $v;
        } else {
            $result[$i] += $v;
        }
    }
}
Dan Sherwin
  • 695
  • 3
  • 14