php - 订单拆分成子订单问题求教

查看:312
本文介绍了php - 订单拆分成子订单问题求教的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.现在我有一个订单,已经处理成了这样一个数组:[detail=[[goods1],[goods2]...],total=[]...]

2.我的商品详情都在detail里面.其中有三个字段分别是store_id,send_way,goods_price

3.拆单规则:先根据store_id拆成一个子订单,如果其中send_way不同,则又拆出来成为一个子订单,如果其中一个子订单的商品价格总和超过了2000则再次拆分出来成为一个子订单.

4.我最后想得到的订单数组格式:[总订单=[[子订单1],[子订单2]...],total=[]...]

测试数据:

$goods_detail = [
            ["goods_name"=> "商品1", "store_id"=> "1", "goods_send_way"=> "1", "goods_total_price"=> "1000.00" ],
            ["goods_name"=> "商品2", "store_id"=> "1", "goods_send_way"=> "2", "goods_total_price"=> "1000.00" ],
            ["goods_name"=> "商品3", "store_id"=> "2", "goods_send_way"=> "2", "goods_total_price"=> "1500.00" ],
            ["goods_name"=> "商品4", "store_id"=> "2", "goods_send_way"=> "1", "goods_total_price"=> "2000.00" ],
            ["goods_name"=> "商品5", "store_id"=> "3", "goods_send_way"=> "2", "goods_total_price"=> "1000.00" ],
            ["goods_name"=> "商品6", "store_id"=> "3", "goods_send_way"=> "2", "goods_total_price"=> "500.00" ],
        ];

我现在做到根据store_id拆出来了,但是接下来根据send_way和goods_price不知道该怎么拆了,求指教

$store_id_arr = array_unique(array_column($goods_detail,'store_id'));
$store = [];
foreach ($goods_detail as $key => $value){
    foreach ($store_id_arr as $store_id_val){
        if($value['store_id'] == $store_id_val){
            $store['store'.$store_id_val][] = $value;
        }
    }
}

解决方案

题主我弄了一下午弄出来了QAQ好心塞


public function SplitOrder($goods_detail){
        $store_id_arr = array_unique(array_column($goods_detail,'store_id'));
        $goods_send = array_unique(array_column($goods_detail,'goods_send_way'));
        $store = [];
        $way = [];
        $data = [];
        $result = [];

        //根据店铺id
        foreach ($goods_detail as $value){
            foreach ($store_id_arr as $store_id_val){
                if($value['store_id'] == $store_id_val){
                    $store['store'.$store_id_val][] = $value;
                }
            }
        }

        //根据运送方式
        foreach ($store as $key => $value){
            foreach ($value as $v){
                foreach ($goods_send as $s){
                    if($v['goods_send_way'] == $s){
                        $way[$key]['way'.$s][] = $v;
                    }
                }
            }
        }

        //降维
        foreach ($way as $value){
            foreach ($value as $v){
                $data[] = $v;
            }
        }

        $j = 0;
        //根据订单金额来拆分订单
        foreach ($data as $key => $value){
            //对子订单中根据一件商品总价排序
            $sort = array(
                'direction' => 'SORT_ASC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
                'field'     => 'goods_total_price',       //排序字段
            );
            $arrSort = array();
            foreach($value AS $uniqid => $row){
                foreach($row AS $k=>$v){
                    $arrSort[$k][$uniqid] = $v;
                }
            }
            if($sort['direction']){
                array_multisort($arrSort[$sort['field']], constant($sort['direction']), $value);
            }

            //总和大于2000另创子订单
            $sum = 0;
            foreach ($value as $v){
                $sum += $v['goods_total_price'];
                if($sum <= 2000){
                    $result[$j][] = $v;
                }else{
                    $j++;
                    $result[$j] = $v;
                }
            }
            $j++;
        }
        return $result;
    }
    
    更详细的方法题主记成了笔记:https://segmentfault.com/n/1330000008707011

这篇关于php - 订单拆分成子订单问题求教的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆