如何在PHP項目中解決嵌套問題-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何在PHP項目中解決嵌套問題,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的沙坪壩網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

思路0:傳統(tǒng)做法

a. 查詢訂單列表

b. 遍歷訂單詳情

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

 分析:查詢SQL次數(shù)為:N+1(N為訂單個數(shù)),這樣頻繁請求數(shù)據(jù)庫,影響效率

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

思路1:

a. 查詢訂單列表后,利用in查出所有訂單詳情

b. 通過(訂單表id => 訂單詳情表order_id)遍歷匹配數(shù)據(jù)

$orderList = select * from order where xx;
	$orderId = array_pluck($orderList, 'id'); // Laravel內(nèi)置數(shù)組輔助函數(shù)
	$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層遍歷,復(fù)雜度較高,數(shù)量過大容易內(nèi)存溢出

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

思路2:

a. 查詢訂單列表后,利用in查出所有訂單詳情

b. 訂單詳情列表轉(zhuǎn)換成以訂單ID為索引,用isset來匹配訂單的詳情

$orderList = select * from order where xx;
	$orderId = array_pluck($orderList, 'id'); // Laravel內(nèi)置數(shù)組輔助函數(shù)
	$orderDetailList = select * from order_detail where order_id IN $orderId;

	// 將訂單詳情轉(zhuǎn)換成以訂單ID為索引【方式1】
	$orderDetailList = arrayGroup($orderDetailList, 'order_id');
	// 或:將訂單詳情轉(zhuǎn)換成以訂單ID為索引【方式2:如果為一對一,可以用array_column】
	// $orderList = array_column($orderDetailList, null, 'order_id'); 

	foreach($orderList as $orderItem) {
		$orderItem->detailList = $orderDetailList[$orderItem->id] ?? [];
	}

	// 根據(jù)KEY數(shù)組分組
	function arrayGroup($list, $key) {
	 $newList = [];
	 foreach ($list as $item) {
	  $newList[$item[$key]][] = $item;
	 }
	 return $newList;
	}

上述就是小編為大家分享的如何在PHP項目中解決嵌套問題了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:如何在PHP項目中解決嵌套問題-創(chuàng)新互聯(lián)
文章來源:http://muchs.cn/article42/cshiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管網(wǎng)站改版、網(wǎng)站策劃虛擬主機(jī)、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)