成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

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

在開(kāi)發(fā)過(guò)程中,我們經(jīng)常遇到一對(duì)多的場(chǎ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為訂單個(gè)數(shù)),這樣頻繁請(qǐng)求數(shù)據(jù)庫(kù),影響效率

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

思路1:

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

b. 通過(guò)(訂單表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ù)量過(guò)大容易內(nèi)存溢出

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

思路2:

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

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

$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:如果為一對(duì)一,可以用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項(xiàng)目中解決嵌套問(wèn)題了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

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

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

廣告

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

小程序開(kāi)發(fā)
阜新| 壤塘县| 阿尔山市| 长寿区| 株洲市| 青川县| 和顺县| 体育| 桦南县| 湟中县| 酒泉市| 颍上县| 常山县| 大余县| 博客| 当阳市| 永年县| 博罗县| 高淳县| 康定县| 广宗县| 漳浦县| 沁水县| 涟源市| 乌鲁木齐市| 屏山县| 乌拉特前旗| 张家川| 黑山县| 敦化市| 那曲县| 宜兰市| 彰化县| 扎囊县| 通江县| 茌平县| 洛阳市| 桦甸市| 东丰县| 陕西省| 西华县|