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...