php 处理多维数组 多个元素相同的项 才进行数值元素的累加

新手上路,请多包涵

问题描述

如图,要达到如下的转换,name值相同且weight值相同才进行number值累加,

如果只是单纯的name值相同就进行累加覆盖,我会写.

但是这种判断多个相同才累加的我写的代码有bug,想请教下如何解决这个问题???

图片描述

相关代码

原数组代码

$arr = array(
['name' => '白菜', 'number' => 50, 'weight' => '斤'],
['name' => '白菜', 'number' => 50, 'weight' => '袋'],
['name' => '西红柿', 'number' => 50, 'weight' => '斤'],
['name' => '西红柿', 'number' => 50, 'weight' => '斤']
);

目标数组
$arr1 = array(
['name' => '白菜', 'number' => 50, 'weight' => '斤'],
['name' => '白菜', 'number' => 50, 'weight' => '袋'],
['name' => '西红柿', 'number' => 100, 'weight' => '斤']
);

阅读 3.1k
2 个回答
$result = [];
foreach ($arr as $key => $value) {
    if(isset($result[$value['name'].'_'.$value['weight']])){
         $result[$value['name'].'_'.$value['weight']]['number'] += $value['number'];
    }else{
        $result[$value['name'].'_'.$value['weight']] = $value;
    }
}
var_dump(array_values($result));
$arr = array(
['name' => '白菜', 'number' => 49, 'weight' => '斤'], 
['name' => '白菜', 'number' => 50, 'weight' => '袋'], 
['name' => '白菜', 'number' => 51, 'weight' => '斤'], 
['name' => '西红柿', 'number' => 50, 'weight' => '斤'], 
['name' => '西红柿', 'number' => 51, 'weight' => '斤']
);
$len = count($arr);
for($i=0;$i<$len;$i++)
{
    for($j=$i+1;$j<$len;$j++)
    {
        if(isset($arr[$i])&&isset($arr[$j])){
            if($arr[$i]['name']==$arr[$j]['name']&&$arr[$i]['weight']==$arr[$j]['weight'])
            {
                $arr[$i]['number']+=$arr[$j]['number'];
                unset($arr[$j]);
            }
        }
        
    }
}
 var_dump($arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题