关于数据组装问题

$tradeData =  [
            ['name'=>'张三','price'=>5,'type'=>'wx','num'=>2,'data_type'=>'trade'],
            ['name'=>'张三','price'=>15,'type'=>'ali','num'=>3,'data_type'=>'trade'],
            ['name'=>'张三','price'=>20,'type'=>'other','num'=>4,'data_type'=>'trade'],
            ['name'=>'李四','price'=>5,'type'=>'wx','num'=>3,'data_type'=>'trade'],
            ['name'=>'李四','price'=>15,'type'=>'ali','num'=>4,'data_type'=>'trade'],
            ['name'=>'李四','price'=>20,'type'=>'other','num'=>5,'data_type'=>'trade'],
            ['name'=>'王五','price'=>20,'type'=>'wx','num'=>5,'data_type'=>'trade'],
            ['name'=>'麻子','price'=>10,'type'=>'ali','num'=>5,'data_type'=>'trade'],
        ];

        $rechargeData = [
            ['name'=>'张三','price'=>5,'type'=>'wx','num'=>1,'data_type'=>'recharge'],
            ['name'=>'张三','price'=>15,'type'=>'ali','num'=>1,'data_type'=>'recharge'],
            ['name'=>'张三','price'=>30,'type'=>'other','num'=>1,'data_type'=>'recharge'],
            ['name'=>'李四','price'=>5,'type'=>'wx','num'=>1,'data_type'=>'recharge'],
            ['name'=>'李四','price'=>15,'type'=>'ali','num'=>1,'data_type'=>'recharge'],
            ['name'=>'李四','price'=>30,'type'=>'other','num'=>1,'data_type'=>'recharge'],
            ['name'=>'王五','price'=>30,'type'=>'other','num'=>1,'data_type'=>'recharge'],
            ['name'=>'刘六','price'=>10,'type'=>'other','num'=>1,'data_type'=>'recharge'],
        ];

        $data = array_merge($tradeData,$rechargeData);

        $newData = [];
        foreach ($data as $k=>$v) {
            if(isset($newData[$v['name']])) {
                $newData[$v['name']]['count'] += $v['price'];
                if($v['data_type']=='trade') {
                    $newData[$v['name']]['trade'] += $v['price'];
                    $newData[$v['name']]['trade_num'] += $v['num'];
                    if($v['type']=='wx') {
                        $newData[$v['name']]['wx'] += $v['price'];
                    } elseif ($v['type']=='ali') {
                        $newData[$v['name']]['ali'] += $v['price'];
                    } elseif ($v['type']=='other') {
                        $newData[$v['name']]['other'] += $v['price'];
                    }
                } else {
                    $newData[$v['name']]['recharge'] += $v['price'];
                    $newData[$v['name']]['recharge_num'] += $v['num'];
                    if($v['type']=='wx') {
                        $newData[$v['name']]['wx'] += $v['price'];
                    } elseif ($v['type']=='ali') {
                        $newData[$v['name']]['ali'] += $v['price'];
                    } elseif ($v['type']=='other') {
                        $newData[$v['name']]['other'] += $v['price'];
                    }
                }

            } else {
                $newData[$v['name']]['name'] = $v['name'];
                $newData[$v['name']]['count'] = $v['price'];
                $newData[$v['name']]['trade'] = 0;
                $newData[$v['name']]['trade_num'] = 0;
                $newData[$v['name']]['recharge'] = 0;
                $newData[$v['name']]['recharge_num'] =0;
                $newData[$v['name']]['wx'] = 0;
                $newData[$v['name']]['ali'] = 0;
                $newData[$v['name']]['other'] = 0;

                if($v['data_type']=='trade') {
                    $newData[$v['name']]['trade'] = $v['price'];
                    $newData[$v['name']]['trade_num'] = $v['num'];
                    if($v['type']=='wx') {
                        $newData[$v['name']]['wx'] = $v['price'];
                    } elseif ($v['type']=='ali') {
                        $newData[$v['name']]['ali'] = $v['price'];
                    } elseif ($v['type']=='other') {
                        $newData[$v['name']]['other'] = $v['price'];
                    }
                } else {
                    $newData[$v['name']]['recharge'] = $v['price'];
                    $newData[$v['name']]['recharge_num'] = 1;
                    if($v['type']=='wx') {
                        $newData[$v['name']]['wx'] = $v['price'];
                    } elseif ($v['type']=='ali') {
                        $newData[$v['name']]['ali'] = $v['price'];
                    } elseif ($v['type']=='other') {
                        $newData[$v['name']]['other'] = $v['price'];
                    }
                }
            }
        }

装成$combineData; count=recharge+trade; trade是tradeData下的某个人的price的和;recharge是rechargeData下某个人的price的和;count:总计,统计某人的充值和交易的price和trade指的交易钱数,recharge充值钱数,trade_num指的是交易笔数,recharge_num指的是充值笔数.

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

如果是我的话会这么写:

        $myData=[];
        foreach ($data as $item){
            if(!isset($myData[$item['name']])){
                $myData[$item['name']]=[
                    'name'=>$item['name'],
                    'count'=>0,
                    'trade'=>0,
                    'trade_num'=>0,
                    'recharge'=>0,
                    'recharge_num'=>0,
                    'wx'=>0,
                    'ali'=>0,
                    'other'=>0
                ];
            }
            $myData[$item['name']]['count']+=$item['price'];
            $myData[$item['name']][$item['type']]+=$item['price'];
            $myData[$item['name']][$item['data_type']]+=$item['price'];
            $myData[$item['name']][$item['data_type'].'_num']+=$item['num'];
        }
2年前 评论
讨论数量: 6

好歹出个原始方法吧,不然谁知道你要什么,比如count,trade这些是怎么来的

2年前 评论
蒋蒋蒋蒋 (楼主) 2年前

如果是我的话会这么写:

        $myData=[];
        foreach ($data as $item){
            if(!isset($myData[$item['name']])){
                $myData[$item['name']]=[
                    'name'=>$item['name'],
                    'count'=>0,
                    'trade'=>0,
                    'trade_num'=>0,
                    'recharge'=>0,
                    'recharge_num'=>0,
                    'wx'=>0,
                    'ali'=>0,
                    'other'=>0
                ];
            }
            $myData[$item['name']]['count']+=$item['price'];
            $myData[$item['name']][$item['type']]+=$item['price'];
            $myData[$item['name']][$item['data_type']]+=$item['price'];
            $myData[$item['name']][$item['data_type'].'_num']+=$item['num'];
        }
2年前 评论

哈哈哈哈头疼 看这个if嵌套看了都摇头

2年前 评论
蒋蒋蒋蒋 (楼主) 2年前

php 新手试答一下

$newData = [];

foreach (array_merge($tradeData, $rechargeData) as $k => ['name' => $name, 'price' => $price, 'type' => $type, 'num' => $num, 'data_type' => $belong]) {
    $a = &$newData[$name];
    $a ??= ['name' => $name] + array_fill_keys(['count', 'trade', 'trade_num', 'recharge', 'recharge_num', 'wx', 'ali', 'other'], 0);
    $a['count'] += $price;
    $a[$type] += $price;
    $a[$belong] += $price;
    $a[$belong . '_num'] += $num;
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!