Php 对具有相同键的数组元素求和

Php 对具有相同键的数组元素求和,php,arrays,php-5.3,Php,Arrays,Php 5.3,我有一个如下所示的对象数组: [{"SerialNo":"38","Name":"Client X","CounterDate":"2015-12-12","CursUSD":"3.91","M1":"29007","M2":"142109","M3":"403","M4":"383","M5":"171116"}, {"SerialNo":"38","Name":"Client X","CounterDate":"2015-11-11","CursUSD":"3.85","M1":"2660

我有一个如下所示的对象数组:

[{"SerialNo":"38","Name":"Client X","CounterDate":"2015-12-12","CursUSD":"3.91","M1":"29007","M2":"142109","M3":"403","M4":"383","M5":"171116"},
 {"SerialNo":"38","Name":"Client X","CounterDate":"2015-11-11","CursUSD":"3.85","M1":"26605","M2":"126979","M3":"370","M4":"360","M5":"153584"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-11","CursUSD":"3.90","M1":"6","M2":"7","M3":"8","M4":"9","M5":"10"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}
 {"SerialNo":"89","Name":"Client X3","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}]
[{"SerialNo":"38","Name":"Client X","CounterDate":"2015-12-12","CursUSD":"3.91","M1":"2402","M2":"15130","M3":"33","M4":"23","M5":"17532"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-11","CursUSD":"3.90","M1":"5","M2":"5","M3":"5","M4":"5","M5":"5"},
 {"SerialNo":"89","Name":"Client X3","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}]
我正在尝试组合具有相同序列号的子数组。数据几乎总是成对的。如果不是,这只是一条线,应该保留。(如客户机X3)

我需要的输出如下:

[{"SerialNo":"38","Name":"Client X","CounterDate":"2015-12-12","CursUSD":"3.91","M1":"29007","M2":"142109","M3":"403","M4":"383","M5":"171116"},
 {"SerialNo":"38","Name":"Client X","CounterDate":"2015-11-11","CursUSD":"3.85","M1":"26605","M2":"126979","M3":"370","M4":"360","M5":"153584"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-11","CursUSD":"3.90","M1":"6","M2":"7","M3":"8","M4":"9","M5":"10"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}
 {"SerialNo":"89","Name":"Client X3","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}]
[{"SerialNo":"38","Name":"Client X","CounterDate":"2015-12-12","CursUSD":"3.91","M1":"2402","M2":"15130","M3":"33","M4":"23","M5":"17532"},
 {"SerialNo":"69","Name":"Client X2","CounterDate":"2015-12-11","CursUSD":"3.90","M1":"5","M2":"5","M3":"5","M4":"5","M5":"5"},
 {"SerialNo":"89","Name":"Client X3","CounterDate":"2015-12-09","CursUSD":"3.88","M1":"1","M2":"2","M3":"3","M4":"4","M5":"5"}]

所以SerialNo和Name被保留,CounterDate和CursUSD是第一行遇到的,M1.firstline-M1.secondline,M2.firstline-M2.secondline…

你试过什么吗?我只找到多维数组的答案,所以没有真正的帮助。你是不是懒得迭代?你不需要找到答案。。你必须自己试一试。。否则你什么也学不到我不知道如何比较第一个物体和第二个物体。我知道我可以做一件事,但在那之后。。。
$array = json_decode($json, true);

$result = array_reduce($array, function ($result, $item) {
    if (!isset($result[$item['SerialNo']])) {
        $result[$item['SerialNo']] = $item;
    } else {
        $result[$item['SerialNo']]['M1'] += $item['M1'];
        $result[$item['SerialNo']]['M2'] += $item['M2'];
        $result[$item['SerialNo']]['M3'] += $item['M3'];
        $result[$item['SerialNo']]['M4'] += $item['M4'];
        $result[$item['SerialNo']]['M5'] += $item['M5'];
    }
    return $result;
}, array());

var_dump(json_encode($result));