PHP樹結構的應用,利用PHP的引用生成樹的結構

2021-10-25 20:38:09 字數 2241 閱讀 8750

php中的引用就是兩個變數指向了同乙個地方,只要在變數前面增加了&符號,它就變成了乙個引用

$a='aaa';

$b=&$a;

$c=&$b;

xdebug_debug_zval('a','b','c');

輸出結果是:

a: (refcount=3, is_ref=1)='aaa'

b: (refcount=3, is_ref=1)='aaa'

c: (refcount=3, is_ref=1)='aaa'

「aaa」有了三個引用 , 並且是is_ref是引用型別,那也就意味著不管是我修改$b ,還是修改$c , "aaa"這個都會被改變

可以根據上面這個原理來把乙個資料庫儲存的帶pid的逐行資料,變成乙個多層級的樹狀結構

$data=array(

array("id"=>2,"pid"=>1),

array("id"=>3,"pid"=>1),

array("id"=>4,"pid"=>2),

array("id"=>5,"pid"=>2),

array("id"=>6,"pid"=>3),

array("id"=>7,"pid"=>3),

array("id"=>1,"pid"=>0),

$refer=array();//儲存主鍵與陣列單元的引用關係

//遍歷

foreach($data as $k=>$v){

$refer[$v['id']]=&$data[$k];//為每個陣列成員建立對應關係

//遍歷2

foreach($data as $k=>$v){

$parent=&$refer[$v['pid']];//獲取父分類的引用

$parent['child']=&$data[$k];//在父分類的children中再新增乙個引用成員

print_r($data);

利用了乙個$refer陣列,時間複雜度是o(n) , 只需要單層迴圈,直接通過引用修改$data原資料,生成乙個樹狀結構

array

[0] => array

[id] => 2

[pid] => 1

[child] => array

[0] => array

[id] => 4

[pid] => 2

[1] => array

[id] => 5

[pid] => 2

[1] => array

[id] => 3

[pid] => 1

[child] => array

[0] => array

[id] => 6

[pid] => 3

[1] => array

[id] => 7

[pid] => 3

[2] => array

[id] => 4

[pid] => 2

[3] => array

[id] => 5

[pid] => 2

[4] => array

[id] => 6

[pid] => 3

[5] => array

[id] => 7

[pid] => 3

[6] => array

[id] => 1

[pid] => 0

[child] => array

[0] => array

[id] => 2

[pid] => 1

[child] => array

[0] => array

[id] => 4

[pid] => 2

[1] => array

[id] => 5

[pid] => 2

[1] => array

[id] => 3

[pid] => 1

[child] => array

[0] => array

[id] => 6

[pid] => 3

[1] => array

[id] => 7

[pid] => 3

$a='aaa';

$b=&$a;

$c=&$b;

xdebug_debug_zval('a','b','c');

php陣列生成樹結構資料返回

array array 1 array id 1,pid 0,name a 2 array id 2,pid 0,name b 3 array id 3,pid 1,name c 4 array id 4,pid 3,name a 5 array id 5,pid 4,name e 1.如果不使用 ...

XML的樹結構

xml 文件形成了一種樹結構,它從 根部 開始,然後擴充套件到 枝葉 xml 使用簡單的具有自我描述性的語法 george john reminder don t forget the meeting 第一行是 xml 宣告。它定義 xml 的版本 1.0 和所使用的編碼 iso 8859 1 la...

PHP陣列的應用

php 4.0中新新增了30個與組數有關的函式,其中一些常見的函式可以判斷乙個陣列中是否包含某個元素,對乙個陣列中的元素進行計數,新增或刪除陣列中的元素或者對陣列中的元素進行排序。如果有乙個很大的陣列,而你需要找出其中是否包含乙個特定的元素,就可以使用in array 下面的例子將顯示 not fo...