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获取每个订单下订单商品的数量相关推荐

  1. mysql 订单表与商品表_数据库——订单表中有不同类型的商品,表的设计

    具体需求,做一个类似购物平台,该平台中有多个商家,提供多种销售如酒水,虚拟商品(送花),座位预订等. 现在有两方面的问题,一个在订单方面,是将不同的商品放在不同的订单表中,还是放在同一的一个订单表中. ...

  2. WMS仓库管理系统---(16)订单管理--订单打印

    订单打印是订单管理中一个非常重要的环节,订单分配完成后就可以进行订单打印操作了.订单打印会打印出订单明细,价格,总价等信息.这一节我们来看看订单打印的相关内容.订单打印会显示出库内操作人员去相应的库位 ...

  3. python遍历指定文件夹的所有文件_python 统计指定文件夹下所有的文件数量,BFS方式...

    python 统计指定文件夹下所有的文件数量 本来一直是有这个需求,只是以前写的是递归的方式处理,感觉对资源的占用不友好,而且python的最大递归深度不超过1000,所以改了一下,这里用广度优先遍历 ...

  4. 订单表的字段类型 mysql_Mysql数据库下订单表如何设计?

    Mysql数据库下订单表如何设计 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品 ...

  5. 小米商场系统的购物网站的具体的功能实现(重点讲下订单的生成)

    小米商场系统的购物网站的具体的功能实现(重点讲下订单的生成) 一.需求分析 对于一个常用的购物网站,无非就是前台和后台,前台有相对于的注册和登录功能,负责数据的展示还有其购物车的生成,订单的生成,支付 ...

  6. 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...

    今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...

  7. ASP.NET MVC3书店--第九节 注册与下订单(第一部分)(转)

    http://blog.sina.com.cn/s/blog_6ad539a90100rag1.html 在本节中,我们将要创建一个下订单控制器,该控制器将获取购买者的收货地址与付款信息.在下订单之前 ...

  8. python 数据结构定义_【Python】数据结构如何定义以及清理 例如订单的附带商品信息数据...

    订单内商品数据应该怎么保存 方案一 在订单创建的时候直接把商品数据保存在订单里面,作为订单的一个附属字段 这样子后续修改商品,不会对已经在订单内的商品任何影响 问题:如果商品修改不频繁的情况下,会大量 ...

  9. 商品-商品订单-支付订单

    商品,商品订单有应缴,根据商品订单下支付订单,实缴需要大于应缴,支付回调改商品订单实缴,支付时间.改支付订单 支付时间等. 支付订单实缴在支付时候确定,应缴在创建时候确定,应缴不会改动. 支付分为 初 ...

  10. 删除商品时,如何不影响订单里该商品相关的信息显示

    问题: 起初删除的商品只是让active字段标记为0,不在前端显示,实际还存在于数据库里. 相关的订单展示页,还会调用到被隐藏的商品信息.随着系统的使用,商品主表会越来越大,如何切实的删除过期商品,并 ...

最新文章

  1. python学精通要多久-学习Python从入门到精通需要多长时间
  2. python调用chrome插件_Python使用Chrome插件实现爬虫过程图解
  3. 2019计算机二级java软件_2019年计算机二级Java考试冲刺题及答案(2)
  4. Docker服务启动时报错:Job for docker.service failed because the control process exited with error
  5. java jmap mat_利用jmap和MAT等工具查看JVM运行时堆内存
  6. UNI使用蓝牙连接设备传输数据
  7. python 矩阵乘法梯度下降_使用python和numpy进行梯度下降
  8. 程序员的修神之路是?
  9. 2017/12/29
  10. 强化学习——从最简单的开始入手
  11. mysql 0000-00-00无效_mysql0000-00-00日期异常及解决方法
  12. Selenium自动登陆12306官网(解决图片验证码和滑块验证码问题)
  13. android 图片轮播组件,Android客户端实现图片轮播控件
  14. ArcGis将2000国家大地坐标系转WGS84
  15. 你的生存模式正确吗?
  16. 6款炫酷的HTML5 3D特效源码
  17. 什么是Accessibility(辅助功能)
  18. WindowsTool
  19. 郭炜:CTO、技术VP、技术总监、首席架构师的区别?
  20. sugar与阿龙的互怼(第一季)

热门文章

  1. 辅助函数 php,php的辅助函数功能
  2. mac 黑窗口连接mysql_macOS -- Mac系统如何通过终端使用mysql
  3. levy过程和布朗运动的关系_金融数学之定价模型基础解释【布朗运动|维纳过程|伊藤引理】...
  4. 计算机网络atm功能,ATM技术在计算机网络中的应用
  5. 无线传感网络定向扩散路由仿真matlab,确定性无线传感器网络定向扩散路由协议...
  6. 在c语言中保留35位小数,C语言程序设计复习题(供学有余力学生练习)(35页)-原创力文档...
  7. mysql client 升级_解决consider upgrading MySQL client问题
  8. java项目怎么使用js插件_Intro.js 分步向导插件使用方法 Web程序 - 贪吃蛇学院-专业IT技术平台...
  9. pythoncanny边缘检测自适应阈值_一种自适应阈值的Canny边缘检测算法
  10. c语言有一对兔子结果,c语言编程,求兔子问题。