這期內(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)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)