PHP中怎么引用生成樹結構,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
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');看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。