Php 基于两列合并数组行并对另一列求和

Php 基于两列合并数组行并对另一列求和,php,arrays,merge,Php,Arrays,Merge,我有这个阵列: array( array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' => 11 ), array('id' => 1, 'price' => 20.00, 'stock' => 3, 'year' => 12 ), array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' =>

我有这个阵列:

array(
    array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' => 11 ),
    array('id' => 1, 'price' => 20.00, 'stock' => 3, 'year' => 12 ),
    array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' => 13 ),
    array('id' => 2, 'price' => 36.00, 'stock' => 11, 'year' => 13 ),
);
id
相同(是同一篇文章)且年份为12和13时,我需要对“股票”列求和

结果应该是:

array(
    array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' => 11 ),
    array('id' => 1, 'price' => 20.00, 'stock' => 5, 'year' => 13 ),
    array('id' => 2, 'price' => 36.00, 'stock' => 11, 'year' => 13 ),
);
请注意,'year'=>12已被删除,该行的库存已添加到13行

我无法做到这一点,而不创建一个大混乱的意大利面条代码与一堆颊。也许有一个php函数可以以更简洁的方式实现这一点


对不起,我的英语太差了。

我试着到达这里……请任何人都可以将此代码推一推

$ary = array(
  array('id' => 1, 'price' => 20.00, 'stock' => 8, 'year' => 11 ),
  array('id' => 1, 'price' => 20.00, 'stock' => 3, 'year' => 12 ),
  array('id' => 1, 'price' => 20.00, 'stock' => 2, 'year' => 13 ),
  array('id' => 2, 'price' => 36.00, 'stock' => 11, 'year' => 13 ),
);

$ary2 = $ary;
$i=0;
foreach($ary as $row){

foreach($ary2 as $row2){
    if($row['id']==$row2['id'] && $row['year'] > $row2['year']){
        $ary[$i]['stock'] = $row['stock'] + $row2['stock'];
        unset($row);
    }   
}
//
$i++;
}
echo "<pre/>";
print_r($ary);
$ary=数组(
数组('id'=>1,'price'=>20.00,'stock'=>8,'year'=>11),
数组('id'=>1,'price'=>20.00,'stock'=>3,'year'=>12),
数组('id'=>1,'price'=>20.00,'stock'=>2,'year'=>13),
数组('id'=>2,'price'=>36.00,'stock'=>11,'year'=>13),
);
$ary2=$ary;
$i=0;
foreach($ary作为$row){
foreach($ary2作为$row2){
如果($row['id']=$row2['id']&&$row['year']>$row2['year'])){
$ary[$i]['stock']=$row['stock']+$row2['stock'];
未结算($行);
}   
}
//
$i++;
}
回声“;
印刷品(元);

如果您坚持使用PHP而不是数据库来解决此问题,这将达到以下目的:

函数组\u和($array)
{
$return=array();
foreach($v数组)
{
$key=$v['id'...'.'.'($v['year']==12-13:$v['year']);
如果(数组\键\存在($key,$return))
{
$return[$key]['stock']+=$v['stock'];
如果($v['year']>$return[$key]['year'])
$return[$key]['year']=$v['year'];
}
其他的
{
$return[$key]=$v;
}
}
return$return;
}

一个PHP函数,它将多维数组的某些行分组(由某些任意条件指定),对特定列求和,并假设未分组、未求和的列具有相同的值(因为否则分组就没有意义了)?不,但SQL可以做到这一点。也许你应该在那里寻找解决方案?这是一个好主意,但当它是12或13岁时,我怎么能按年份分组呢?不总是