php - 订单拆分成子订单问题求教
本文介绍了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屋!
查看全文