欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP優(yōu)化教程之解決嵌套問題

 更新時間:2021年02月06日 14:58:11   作者:cc_echo  
這篇文章主要給大家介紹了關于PHP優(yōu)化教程之解決嵌套問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在開發(fā)過程中,我們經常遇到一對多的場景,

例如:查詢訂單列表,并且展示訂單詳情商品、數量數據

思路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為訂單個數),這樣頻繁請求數據庫,影響效率

 優(yōu)化:減少頻繁請求數據庫

思路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層遍歷,復雜度較高,數量過大容易內存溢出

 優(yōu)化:降低復雜度

思路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優(yōu)化教程之解決嵌套問題的文章就介紹到這了,更多相關PHP解決嵌套問題內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何理解PHP核心特性命名空間

    如何理解PHP核心特性命名空間

    在命名空間提出之前,不同的組件很容易碰到命名的沖突,例如Request、Response等常見的命名。本文將帶你理解PHP的核心特性命名空間。
    2021-05-05
  • Cakephp 執(zhí)行主要流程

    Cakephp 執(zhí)行主要流程

    Cakephp執(zhí)行主要流程,學習cakephp的朋友可以參考下。
    2010-03-03
  • php導出CSV抽象類實例

    php導出CSV抽象類實例

    這篇文章主要介紹了php導出CSV抽象類及其用法示例,可實現循環(huán)導出功能,從而避免內存不足的問題,需要的朋友可以參考下
    2014-09-09
  • PHP獲取某個月最大天數(最后一天)的方法

    PHP獲取某個月最大天數(最后一天)的方法

    這篇文章主要介紹了PHP獲取某個月最大天數(最后一天)的方法,涉及php流程控制及數學運算的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • php5 pdo新改動加載注意事項

    php5 pdo新改動加載注意事項

    想試試pdo怎么用,把 extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll
    2008-09-09
  • php求今天、昨天、明天時間戳的簡單實現方法

    php求今天、昨天、明天時間戳的簡單實現方法

    這篇文章主要介紹了php求今天、昨天、明天時間戳的方法,實例分析了strtotime函數的常見使用技巧,非常簡單實用,需要的朋友可以參考下
    2016-07-07
  • PHP高效處理前端數據過濾二維數組并存入數據庫

    PHP高效處理前端數據過濾二維數組并存入數據庫

    這篇文章主要介紹了PHP高效處理前端數據過濾二維數組并存入數據庫,通過從二維數組獲取指定數據,組成新二維數組實現過程示例來為大家講解
    2023-10-10
  • PHP實現文件上傳和多文件上傳

    PHP實現文件上傳和多文件上傳

    這篇文章主要介紹了PHP實現文件上傳和多文件上傳的相關資料,還為大家分享了解決如何修改PHP上傳文件的大小限制問題的方法,需要的朋友可以參考下
    2015-12-12
  • PHP自帶方法驗證郵箱是否存在

    PHP自帶方法驗證郵箱是否存在

    這篇文章主要為大家詳細介紹了PHP自帶方法驗證郵箱是否存在,以及PHP自帶方法驗證URL、IP是否合法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • php實現簡單四則運算器

    php實現簡單四則運算器

    這篇文章主要為大家詳細介紹了php實現簡單四則運算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論