[英]Simple recursive tree in PHP / MySQL
我在MySQL中有這個表:
id name mother
1 grandma 0
2 myuncle 1
3 mymom 1
4 me 3
5 mysister 3
6 myson 4
7 new_grandma_son 1
我在一個名為data[]
的數組中對此信息進行almacenate
$data=array(
array("id"=>1,"name"=>"grandma", "mother"=>0),
array("id"=>2,"name"=>"myuncle", "mother"=>1),
array("id"=>3,"name"=>"mymom", "mother"=>1),
array("id"=>4,"name"=>"me", "mother"=>3),
array("id"=>5,"name"=>"mysister", "mother"=>3),
array("id"=>6,"name"=>"myson", "mother"=>4),
array("id"=>7,"name"=>"new_grandma_son","mother"=>1)
);
為了制作一個家譜,我正在使用這個遞歸函數:
function tree($data, $mom = 0, $level = 0){
foreach ($data as $row){
if ($row['mother'] == $mom) {
echo str_repeat("-", $level).$row['name']."<br>";
tree($data, $row['id'], $level);
}
else $level++;
}
}
當我調用函數tree($data);
它顯示了這個:
grandma
-myuncle (level 1)
-mymom
----me (level 4??)
---------myson (level 9??)
----mysister
----new_grandma_son (level 4??)
我在else $level++;
犯了錯誤else $level++;
,因為在$row['mother'] != $mom
時添加級別,遍歷所有行,但我不知道如何制作它。 有誰知道? 謝謝。
解決方案(由Frits van Campen提供):
tree($data, $row['id'], $level+1);
// (eliminate this else $level++; )
謝謝!
function tree($data,$mom=0,$level=0){
foreach($data as $row){
if($row['mother']==$mom){
echo str_repeat("-",$level).$row['name']."<br>";
tree($data,$row['id'],$level+1);
}
}
}
我認為這會修復你的代碼。 你能提供$data
所以我可以測試嗎?
您可以嘗試這樣,它以Array格式返回值。 我將此功能用於Item category Tree,
function categoryDropDown($categoryArray, $parentId, $level, $options) { $level++; foreach ($categoryArray as $array) { if($array['parentId'] == $parentId) { $opt = str_repeat(">> ", $level-1) . $array['name'] ; $options[$array['id']] = $opt; $newParent = $array['id']; $options = categoryDropDown($categoryArray, $newParent, $level , $options); } } return $options; }
---- ----輸出
//Array Key contains category Id. Array ( [1] => Electronics [2] => >> Mobile [5] => >> >> Mobile Accessories [7] => >> >> >> Sub Category 1 [9] => >> >> >> Sub Category 3 [3] => >> Laptop [6] => >> >> Laptop Accessories [8] => >> >> >> Sub Category 2 [10] => >> >> >> Sub Category 4 [4] => >> Tablet [11] => Main Category 2 )
你可以在這里參考這個代碼的一些高級版本如何在php中顯示從使用數組中選擇多個下拉列表?
你str_repeat("-", $level)
用str_repeat("-", $row['mother'])
替換str_repeat("-", $level)
str_repeat("-", $row['mother'])
嗎?
或者,也許你的情況str_repeat("-", $row['mother'] - 1)
如你不想開始一個-
在奶奶面前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.