dtxpz8785 2017-04-11 16:30
浏览 50
已采纳

合并多维数组然后求和值

I have an array with dinamic value like this. the goal is merge array with have same code and sum of value with same code.

$array = array(
    array(
        array(
            'code'=>'AA',
            'name'=>'A Name',
            'cost'=>'10',
        ),
        array(
            'code'=>'AB',
            'name'=>'B Name',
            'cost'=>'15',
        ),
    ),
    array(
        array(
            'code'=>'AA',
            'name'=>'A Name',
            'cost'=>'15',
        ),
        array(
            'code'=>'AB',
            'name'=>'B Name',
            'cost'=>'10',
        ),
        array(
            'code'=>'AC',
            'name'=>'C Name',
            'cost'=>'10',
        ),
    ),
    array(
        array(
            'code'=>'AA',
            'name'=>'A Name',
            'cost'=>'5',
        ),
        array(
            'code'=>'AB',
            'name'=>'B Name',
            'cost'=>'10',
        ),
        array(
            'code'=>'AC',
            'name'=>'C Name',
            'cost'=>'15',
        ),
    ),
);

And i want result like this

$result = array(
    array(
        array(
            'code'=>'AA',
            'name'=>'A Name',
            'cost'=>'30',
        ),
        array(
            'code'=>'AB',
            'name'=>'B Name',
            'cost'=>'35',
        ),
    ),
);

The result is only code AA and BB because code AC not exist on first index. then code the same value to be sum.

Thanks

  • 写回答

5条回答 默认 最新

  • douhong9210 2017-04-12 03:09
    关注

    Demo

    $array = array(
                array(
                    array(
                        'code'=>'AA',
                        'name'=>'A Name',
                        'cost'=>'10',
                    ),
                    array(
                        'code'=>'AB',
                        'name'=>'B Name',
                        'cost'=>'15',
                    ),
                ),
                array(
                    array(
                        'code'=>'AA',
                        'name'=>'A Name',
                        'cost'=>'15',
                    ),
                    array(
                        'code'=>'AB',
                        'name'=>'B Name',
                        'cost'=>'10',
                    ),
                    array(
                        'code'=>'AC',
                        'name'=>'C Name',
                        'cost'=>'10',
                    ),
                ),
                array(
                    array(
                        'code'=>'AA',
                        'name'=>'A Name',
                        'cost'=>'5',
                    ),
                    array(
                        'code'=>'AB',
                        'name'=>'B Name',
                        'cost'=>'10',
                    ),
                    array(
                        'code'=>'AC',
                        'name'=>'C Name',
                        'cost'=>'15',
                    ),
                ),
            );      
    
            $the_biggest_number=count($array);
    
            $new_array = array();
            foreach ($array as $key => $val) {
    
                foreach ($val as $sub_key => $sub_val) {
                    if(!isset($new_array[$sub_val['code']])){
                            $sub_val['count']=1;
                            $new_array[$sub_val['code']]=$sub_val;
                    }
                    else{
                        $new_array[$sub_val['code']]['cost'] += $sub_val['cost'];
                        $new_array[$sub_val['code']]['count'] += 1;
                    }
                }
            }        
    
            $result=array();
            foreach ($new_array as $key => $val) {
                if($val['count']==$the_biggest_number){
                    unset($val['count']);
                    $result[]=$val;
                }
            }
    
            $result= array($result);
    
            echo '<pre>';
            print_r($result);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝