PHP获取每个订单下订单商品的数量
PHP获取每个订单下订单商品的数量
直接给个Demo:
//获取每个订单下订单商品的数量( 订单 - 订单商品: 1 - n )public function test1(){list($order, $orderGoods) = $this->getData();$orderIds = array_column($order, 'id');$orderIdToName = array_column($order, 'name', 'id');//这里写了2种方法实现list($result, $haveGoodsOrderId, $handleOrderGoods) = $this->method1($orderGoods, $orderIdToName);//list($result, $haveGoodsOrderId, $handleOrderGoods) = $this->method2($orderGoods, $orderIdToName);//结果数据根据order_id升序$orderIdSort= array_column($result, 'order_id');array_multisort($orderIdSort, SORT_ASC, $result);//获取没有商品的订单数据$diffOrderIds = array_diff($orderIds, $haveGoodsOrderId);$diffOrderIds = array_values($diffOrderIds); //索引重置$this->printData($order, $orderGoods, $handleOrderGoods, $result, $diffOrderIds);}//用1个for循环中处理,循环中用in_array()判断public function method1($orderGoods, $orderIdToName){$handleOrderGoods = []; //这个用不到了$result = $tempGoodsOrderId = $haveGoodsOrderId = [];foreach ($orderGoods as $value){ //根据订单ID合并订单商品$orderId = $value['order_id'];if (in_array($orderId, $tempGoodsOrderId)){ //订单有多个商品$orderIds = array_column($result, 'order_id');$offset = array_search($orderId, $orderIds); //获取该order_id在result的第几位:从0开始$result[$offset]['order_number'] += $value['number']; //订单商品数量累加}else{ //订单的第一个商品$result[] = ['order_id' => $orderId,'order_name' => $orderIdToName[$orderId],'order_number' => $value['number']];$haveGoodsOrderId[] = $orderId;$tempGoodsOrderId[] = $orderId;}}return [$result, $haveGoodsOrderId, $handleOrderGoods];}//用2个for循环处理public function method2($orderGoods, $orderIdToName){$handleOrderGoods = [];foreach ($orderGoods as $value){ //根据订单ID合并订单商品$handleOrderGoods[$value['order_id']][] = $value;}$result = $haveGoodsOrderId = [];foreach ($handleOrderGoods as $key => $value){$result[] = ['order_id' => $key,'order_name' => $orderIdToName[$key],'order_number' => array_sum(array_column($value, 'number'))];$haveGoodsOrderId[] = $key;}return [$result, $haveGoodsOrderId, $handleOrderGoods];}//随机生成订单、订单商品 商品数据public function getData(){//生成订单数据$order = [];$count = mt_rand(3, 6); //生成 [3, 6] 个订单数据for ($i = 1; $i <= $count; $i++){$order[] = ['id' => $i,'name' => "订单 [ {$i} ]"];}//生成订单商品数据$orderGoods = [];$goodsCount = mt_rand(5, 10); //生成 [5, 10] 个订单数据for ($i = 1; $i <= $goodsCount; $i++){$orderId = mt_rand(1, $count);$orderGoods[] = ['id' => $i,'order_id' => $orderId, //订单ID'name' => "订单 [ {$orderId} ] 的商品",'number' => mt_rand(4, 7) //商品数量随机生成 [4, 7]];}return [$order, $orderGoods];}//打印结果public function printData($order, $orderGoods, $handleOrderGoods, $result, $diffOrderIds){echo '<pre>';echo '|-----------------订单数据-----------------|<br/>';print_r($order);echo '|-----------------订单商品数据-----------------|<br/>';print_r($orderGoods);echo '|-----------------合并后的订单商品数据-----------------|<br/>';print_r($handleOrderGoods);echo '|-----------------结果数据-----------------|<br/>';print_r($result);echo '|-----------------无商品数据的订单ID-----------------|<br/>';print_r($diffOrderIds);exit();}
PHP获取每个订单下订单商品的数量相关推荐
- mysql 订单表与商品表_数据库——订单表中有不同类型的商品,表的设计
具体需求,做一个类似购物平台,该平台中有多个商家,提供多种销售如酒水,虚拟商品(送花),座位预订等. 现在有两方面的问题,一个在订单方面,是将不同的商品放在不同的订单表中,还是放在同一的一个订单表中. ...
- WMS仓库管理系统---(16)订单管理--订单打印
订单打印是订单管理中一个非常重要的环节,订单分配完成后就可以进行订单打印操作了.订单打印会打印出订单明细,价格,总价等信息.这一节我们来看看订单打印的相关内容.订单打印会显示出库内操作人员去相应的库位 ...
- python遍历指定文件夹的所有文件_python 统计指定文件夹下所有的文件数量,BFS方式...
python 统计指定文件夹下所有的文件数量 本来一直是有这个需求,只是以前写的是递归的方式处理,感觉对资源的占用不友好,而且python的最大递归深度不超过1000,所以改了一下,这里用广度优先遍历 ...
- 订单表的字段类型 mysql_Mysql数据库下订单表如何设计?
Mysql数据库下订单表如何设计 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品 ...
- 小米商场系统的购物网站的具体的功能实现(重点讲下订单的生成)
小米商场系统的购物网站的具体的功能实现(重点讲下订单的生成) 一.需求分析 对于一个常用的购物网站,无非就是前台和后台,前台有相对于的注册和登录功能,负责数据的展示还有其购物车的生成,订单的生成,支付 ...
- 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...
今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...
- ASP.NET MVC3书店--第九节 注册与下订单(第一部分)(转)
http://blog.sina.com.cn/s/blog_6ad539a90100rag1.html 在本节中,我们将要创建一个下订单控制器,该控制器将获取购买者的收货地址与付款信息.在下订单之前 ...
- python 数据结构定义_【Python】数据结构如何定义以及清理 例如订单的附带商品信息数据...
订单内商品数据应该怎么保存 方案一 在订单创建的时候直接把商品数据保存在订单里面,作为订单的一个附属字段 这样子后续修改商品,不会对已经在订单内的商品任何影响 问题:如果商品修改不频繁的情况下,会大量 ...
- 商品-商品订单-支付订单
商品,商品订单有应缴,根据商品订单下支付订单,实缴需要大于应缴,支付回调改商品订单实缴,支付时间.改支付订单 支付时间等. 支付订单实缴在支付时候确定,应缴在创建时候确定,应缴不会改动. 支付分为 初 ...
- 删除商品时,如何不影响订单里该商品相关的信息显示
问题: 起初删除的商品只是让active字段标记为0,不在前端显示,实际还存在于数据库里. 相关的订单展示页,还会调用到被隐藏的商品信息.随着系统的使用,商品主表会越来越大,如何切实的删除过期商品,并 ...
最新文章
- python学精通要多久-学习Python从入门到精通需要多长时间
- python调用chrome插件_Python使用Chrome插件实现爬虫过程图解
- 2019计算机二级java软件_2019年计算机二级Java考试冲刺题及答案(2)
- Docker服务启动时报错:Job for docker.service failed because the control process exited with error
- java jmap mat_利用jmap和MAT等工具查看JVM运行时堆内存
- UNI使用蓝牙连接设备传输数据
- python 矩阵乘法梯度下降_使用python和numpy进行梯度下降
- 程序员的修神之路是?
- 2017/12/29
- 强化学习——从最简单的开始入手
- mysql 0000-00-00无效_mysql0000-00-00日期异常及解决方法
- Selenium自动登陆12306官网(解决图片验证码和滑块验证码问题)
- android 图片轮播组件,Android客户端实现图片轮播控件
- ArcGis将2000国家大地坐标系转WGS84
- 你的生存模式正确吗?
- 6款炫酷的HTML5 3D特效源码
- 什么是Accessibility(辅助功能)
- WindowsTool
- 郭炜:CTO、技术VP、技术总监、首席架构师的区别?
- sugar与阿龙的互怼(第一季)
热门文章
- 辅助函数 php,php的辅助函数功能
- mac 黑窗口连接mysql_macOS -- Mac系统如何通过终端使用mysql
- levy过程和布朗运动的关系_金融数学之定价模型基础解释【布朗运动|维纳过程|伊藤引理】...
- 计算机网络atm功能,ATM技术在计算机网络中的应用
- 无线传感网络定向扩散路由仿真matlab,确定性无线传感器网络定向扩散路由协议...
- 在c语言中保留35位小数,C语言程序设计复习题(供学有余力学生练习)(35页)-原创力文档...
- mysql client 升级_解决consider upgrading MySQL client问题
- java项目怎么使用js插件_Intro.js 分步向导插件使用方法 Web程序 - 贪吃蛇学院-专业IT技术平台...
- pythoncanny边缘检测自适应阈值_一种自适应阈值的Canny边缘检测算法
- c语言有一对兔子结果,c语言编程,求兔子问题。