我的想法很簡單:if child-> indent,if parent-> make bold。PHP遞歸問題
比方說p0爲P1和P2,P3和P4的母公司是P1的孩子的。 p5是像p0這樣的獨立頁面。所以我想得到的是
p0 (bold font)
[3px]p1(bold font)
[ 6px ]p3
[ 6px ]p4
[3px]p2
p5 (bold font)
問題是,我想不通。如何實現我的想法。試過給定的功能。沒有成功。它的工作原理,但只縮進一級孩子。我的遞歸PHP功能看起來像
function generateOptions($parent, $level, $padding, $db)
{
$result=$db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu!='0'");
if($level == 0) {$padding=''; $optstyle='bold';}
else {$optstyle='std'; $padding=' ';}
while($data=$result->fetch_row()){
echo generateOption($optstyle.'option', $data, $padding);
generateOptions($data[0], $level++, $padding, $db);
}
}
function generateOption($type,$data, $padding){
switch($type){
case 'boldoption': return '<option class="bold" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
case 'stdoption': return '<option class="std" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
}
}
這裏是我的數據庫表的截圖。 http://prntscr.com/39461
最後的工作效果
function generateOptions($parent, $level, $padding, $db)
{
$result=$db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu!='0'");
$spacer = ' ';
$padding = str_repeat($spacer, $level);
while($data=$result->fetch_row()){
$children_html = generateOptions($data[0], $level+1, $padding, $db);
$optstyle = empty($children_html) ? 'std' : 'bold';
$html .= generateOption($optstyle.'option', $level, $data, $padding);
$html .= $children_html;
}
return $html;
}
function generateOption($type, $level, $data, $padding){
$bgcolor=array('0'=>'#f66e02','1'=>'#FF9C4D', '2'=>'#FF9C4D');
$fontcolor=array('0'=>'#fff','1'=>'#000', '2'=>'#000');
switch($type){
case 'boldoption': return '<option class="bold" style="background-color:'.$bgcolor[$level].'; color:'.$fontcolor[$level].'" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
case 'stdoption': return '<option class="std" value="'.$data[0].'">'.$padding.$data[1]."</option>\n"; break;
}
}
我無法弄清楚如何實現你已經發送到我的代碼的鏈接 – demonoid
有3個步驟:第一步你得到你的數據庫信息在一個平面數組中,然後你在多維數組中變換這個平面數組(使用該遞歸函數的變體),然後你可以編寫不同的(遞歸...)函數來生成html輸出想要(或者只有一個用於你的「選項」) – jeroen
我更新了我的問題請看看 – demonoid