• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP优化教程之解决嵌套问题

    在开发过程中,我们经常遇到一对多的场景,

    例如:查询订单列表,并且展示订单详情商品、数量数据

    思路0:传统做法

    a. 查询订单列表

    b. 遍历订单详情

    	$orderList = select * from order where xx;
    	foreach($orderList as $orderItem) {
    		$orderItem->detailList = select * from order_detail where order_id = $orderItem->id;
    	}
    

     分析:查询SQL次数为:N+1(N为订单个数),这样频繁请求数据库,影响效率

     优化:减少频繁请求数据库

    思路1:

    a. 查询订单列表后,利用in查出所有订单详情

    b. 通过(订单表id => 订单详情表order_id)遍历匹配数据

    	$orderList = select * from order where xx;
    	$orderId = array_pluck($orderList, 'id'); // Laravel内置数组辅助函数
    	$orderDetailList = select * from order_detail where order_id IN $orderId;
    	foreach($orderList as $orderItem) {
    		$detailListTemp = [];
    		foreach($orderDetailList as $orderDetailItem) {
    			if ($orderItem->id == $orderDetailItem->order_id) {
    				$detailListTemp[] = $orderDetailItem;		
    			}
    		}
    		$orderItem->detailList = $detailListTemp;
    	}
    

     分析:降低查询后,但2层遍历,复杂度较高,数量过大容易内存溢出

     优化:降低复杂度

    思路2:

    a. 查询订单列表后,利用in查出所有订单详情

    b. 订单详情列表转换成以订单ID为索引,用isset来匹配订单的详情

    	$orderList = select * from order where xx;
    	$orderId = array_pluck($orderList, 'id'); // Laravel内置数组辅助函数
    	$orderDetailList = select * 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解决嵌套问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 浅谈PHP性能优化之php.ini配置
    • 详解PHP优化巨量关键词的匹配
    • PHP引擎php.ini参数优化深入讲解
    • php优化查询foreach代码实例讲解
    • PHP安全配置优化详解
    • PHP内存溢出优化代码详解
    • PHP解决高并发的优化方案实例
    • PHP优化之批量操作MySQL实例分析
    • 如何使用PHP对象POPO来优化你的代码
    上一篇:laravel 表单验证实现多个字段组合后唯一
    下一篇:php中Workerman框架实例讲解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP优化教程之解决嵌套问题 PHP,优化,教程,之,解决,嵌套,