- 相關(guān)推薦
PHP高效獲取樹(shù)結構信息
學(xué)習是通過(guò)具體的例子來(lái)多練習,知識點(diǎn)才會(huì )掌握鞏固。以下是百分網(wǎng)小編精心為大家整理的PHP教程,希望對大家有所幫助!更多內容請關(guān)注應屆畢業(yè)生網(wǎng)!
在開(kāi)發(fā)中,經(jīng)常有一些簡(jiǎn)單的樹(shù)形結構的存儲,比如產(chǎn)品的多級分類(lèi),多級導航欄菜單等,這些物體有一個(gè)特性,就是通常會(huì )獲取整棵樹(shù)結構。在數據庫里保存樹(shù)結構的方法主要有三種,最簡(jiǎn)單的一就是通過(guò)一個(gè)father_id指向當前結構的父節點(diǎn)。對于這樣的小結構,一般我們使用最簡(jiǎn)單的方式存儲。
當要獲取整棵樹(shù)結構,網(wǎng)上一般用遞歸法,這種方式代碼簡(jiǎn)單易懂,但是缺點(diǎn)是需要執行多次數據庫查詢(xún),而且后面幾次獲取的元素數量很少甚至為0,效率很差。
其實(shí),遇到這種情況,可以將所有的元素全部從數據庫獲取出來(lái),然后再根據獲取的元素father_id構建樹(shù)結構,這樣就可以解決執行多次數據庫查詢(xún)的性能損耗。下面就以我在實(shí)際項目中獲取多級導航欄菜單中的函數進(jìn)拋磚引玉了
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/*通過(guò)數據庫獲取所有元素,通過(guò)下面函數構造樹(shù)形結構*/private function getTree($menus){ $id = $level = 0;$menuobjs=array(); $tree = array();$notrootmenu=array(); foreach($menus as $menu){ $menuobj=new stdClass();$menuobj->menu=$menu; $id = $menu['id'];$level = $menu['father_id'];$menuobj->nodes = array();$menuobjs[$id]=$menuobj;if ($level) {$notrootmenu[]=$menuobj;} else {$tree[] = $menuobj;} }foreach($notrootmenu as $menuobj){$menu=$menuobj->menu;$id = $menu['id'];$level = $menu['father_id'];$menuobjs[$level]->nodes[]=$menuobj;} return $tree; }} |
【拓展閱讀】php好學(xué)嗎?幾個(gè)月能學(xué)會(huì )php開(kāi)發(fā)嗎?
好多要來(lái)硬漢科技學(xué)習的學(xué)員在來(lái)之前都問(wèn)我:老師,我不是專(zhuān)業(yè)的計算機學(xué)生,我沒(méi)有接觸過(guò)PHP ,我一點(diǎn)基礎也沒(méi)有,我能學(xué)會(huì )PHP嗎?也有些一直想來(lái)硬漢科技學(xué)習PHP的學(xué)員很好奇,這么多的內容,在4個(gè)多月的時(shí)間就全部學(xué)完,真的可以么?這幾個(gè)月以后自己還是一問(wèn)三不知怎么辦?今天,我們就來(lái)說(shuō)說(shuō)學(xué)習PHP開(kāi)發(fā)這件事。
PHP是什么,應用得怎么樣?
PHP,一個(gè)嵌套的縮寫(xiě)名稱(chēng),是英文超級文本預處理語(yǔ)言(PHP:Hypertext Preprocessor)的縮寫(xiě)。PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn),利于學(xué)習,使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域,現在被很多的網(wǎng)站編程人員廣泛的運用(以上為專(zhuān)業(yè)解釋)。小編還想說(shuō)的是,很多大型網(wǎng)站其實(shí)都是用PHP語(yǔ)言編寫(xiě)的,比如:百度、阿里巴巴、騰訊(簡(jiǎn)稱(chēng)BAT)。
4個(gè)多月能學(xué)會(huì )PHP嗎?
在回答這個(gè)問(wèn)題之前小編想說(shuō)一下大道理,有些時(shí)候,我們往往把事情想的太困難,而真正去做的時(shí)候,才會(huì )發(fā)現自己的潛力。永遠不要懷疑自己的能力,有時(shí)候你不逼自己一把,根本不知道自己有多優(yōu)秀,與其前怕狼后怕虎,不如拼盡全力的去學(xué)習這幾個(gè)月。
現在回到這個(gè)問(wèn)題上來(lái),對于沒(méi)有基礎的朋友幾個(gè)月真的能學(xué)會(huì )PHP開(kāi)發(fā)嗎?小編的回答是:能,也不能!有人肯定就會(huì )對我這個(gè)答案嗤之以鼻,說(shuō)你的答案和不回答有什么區別呢?其實(shí),大道理誰(shuí)都明白。對于有毅力肯下功夫學(xué)習的人說(shuō)的,是可以學(xué)好的;但那些一遇到困難就退縮的人來(lái)說(shuō),就真是遺憾了。在硬漢科技每天8:30準時(shí)上課,并且還有晚自習,技術(shù)老師也會(huì )全程陪著(zhù)你,有不懂的問(wèn)題可以隨時(shí)詢(xún)問(wèn)。這樣的學(xué)習環(huán)境下,你說(shuō)能不能學(xué)會(huì )PHP?
學(xué)習天貓、UI、Web前端等任何一門(mén)新的技術(shù)也是這樣,“世上無(wú)難事,只怕有心人”你沒(méi)有下定決心去做一件事,怎么知道自己不能學(xué)會(huì )呢。
舉個(gè)栗子:硬漢科技在2015年11月PHP的班級里面有一名學(xué)員是高中畢業(yè)生,并且已經(jīng)在酒吧工作了好幾年了。用他自己的話(huà)來(lái)說(shuō):僅有的一點(diǎn)點(diǎn)知識早已經(jīng)丟到了爪哇國了,但是通過(guò)他在硬漢科技的5個(gè)月的努力學(xué)習,他不僅找到了工作,而且工資還是班里的佼佼者,這樣,你有沒(méi)有信心學(xué)好PHP了呢?
【PHP高效獲取樹(shù)結構信息】相關(guān)文章:
PHP如何獲取系統信息11-04
如何利用PHP語(yǔ)言獲取連接信息10-01
PHP獲取星期的方法07-06
PHP如何獲取表單07-27
php怎么獲取input的id09-10
php創(chuàng )建獲取cookie及基礎要點(diǎn)11-02
使用PHP獲取數組的鍵與值10-08