在开发过程中,我们经常遇到一对多的场景,
例如:查询订单列表,并且展示订单详情商品、数量数据
思路0:传统做法
a. 查询订单列表
b. 遍历订单详情
$orderlist = lect * from order where xx;foreach($orderlist as $orderitem) {$orderitem->detaillist = lect * from order_detail where order_id = $orderitem->id;}
分析:查询sql次数为:n+1(n为订单个数),这样频繁请求数据库,影响效率
优化:减少频繁请求数据库
思路1:
a大学校长什么级别. 查询订单列表后,利用in查出所有订单详情
b. 通过(订单表id => 订单详情表order_id)遍历匹配数据
$orderlist = lect * from order where xx;$orderid = array_pluck($orderlist, 'id'); // laravel内置数组辅助函数$orderdetaillis龙岗区东升学校t一年级下册语文教学总结 = lect * from order_detail where order_id in $orderid;foreach($orderlist as $orderitem) {$detaillisttemp = [];foreach($orderdetaillist as $orderdetailitem) {if ($orderitem->id == $orderdetailitem->order_id) {$detaillisttemp[] = $orderdetailite深大校花m;}}$orderitem->detaillist = $detaillisttemp;}
分析:降低查询后,但2层遍历,复杂度较高,数量过大容易内存溢出
优化:降低复杂度
思路2:
a. 查询订单列表后,利用in查出所有订单详情
b. 订单详情列表转换成以订单id为索引,用ist来匹英雄英语怎么说配订单的详情
$orderlist = lect * from order where xx;$orderid = array_pluck($orderlist, 'id'); // laravel内置数组辅助函数$orderdetaillist = lect * from order_detail where order_id in $orderid;// 将订单详情转换成以订单id为索引【方式1】$orderdetaillist = arraygroup($orderdetaillist, 'order_id');// 或:将订单详情转换成以订单id为索引【方式2:如果为一对一,可以用array_column】// $orderlist = array_column($orderdetaillist, null, 'order_id'); foreach($orderlist as $orderitem) {$orderitem->detaillist = $orderdetaillist[$orderitem->id] ?? [];}// 根据key数组分组function arraygroup($list, $key) { $newlist = []; foreach ($list as $item) { $newlist[$item[$key]][] = $item; } return $newlist;}
总结
到此这篇关于php优化教程之解决嵌套问题的文章就介绍到这了,更多相关php解决嵌套问题内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-09 01:48:58,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/2226ae4e682b9fafb4d0b5fb94b04497.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP优化教程之解决嵌套问题.doc
本文 PDF 下载地址:PHP优化教程之解决嵌套问题.pdf
留言与评论(共有 0 条评论) |