2012-07-05 72 views
2

我在建立多級選擇框時遇到問題。我有結構的類別表:id,parent_id,名稱。如果parent_id = 0,則它是頂級。我不知道關卡深度,所以它可能是2,3-5關卡。 我怎麼能與查詢建造它「SELECT * FROM貓」 結果想看起來像多級選擇框

<select> 
<option>cat_name</option> 
<option>--cat_name_l1</option> 
<option>--cat_name_l1</option> 
<option>----cat_name_l2</option> 
<option>----cat_name_l2</option> 
<option>cat_name</option> 
</select> 

你能幫助我嗎?

+0

我認爲你應該做多組合框:如果需要,通過添加新的'js' – k102 2012-07-05 11:06:59

回答

2
function _buildTree($data, $idParent, $indentSymbol, $level) 
{ 
    $cat = array(); 
    foreach($data as $row){ 
     if($row['parent_id'] == $idParent){ 
      if($indentSymbol AND $level > 0){ 
       $symbols = array_fill(0, $level, $indentSymbol); 
       $cat[$row['id']] = implode('', $symbols) . $row['name']; 
      }else{ 
       $cat[$row['id']] = $row['name']; 
      } 

      $cat = $cat + _buildTree($data, $row['id'], $indentSymbol, $level++); 
     } 
    } 
    return $cat; 
} 

$result = mysql_query("SELECT * FROM cats"); 

$data = array(); 
while($row = mysql_fetch_assoc($result)){ 
    $data[] = $row; 
} 

$select = '<select>'; 

foreach(_buildTree($data, 0, '-', 0) as $key=>$option){ 
    $select .= '<option value=' . $key . '>' . $option . '</option>'; 
} 

$select .= '</select>'; 
-1

嘗試此生成所需的下拉列表:

$result=mysql_query("SELECT * FROM cats"); 
$opt='<select>'; 
while($row=mysql_fetch_array($result)) 
{ 
    $cat[$row['id']][0]=$row['parent_id']; 
    $cat[$row['id']][1]=$row['name']; 
} 
foreach($cat as $ct) 
{ 
    $level=0; 
    $temp=$ct; 
    while($temp[0]!=0) 
    { 
     $temp=$cat[$temp[0]]; 
     $level++; 
    } 
    $opt.="<option>"; 
    for($i=0;$i<$level;$i++) 
    { 
     $opt.="--"; 
    } 
    $opt.=$ct[1]; 
    $opt.="</option>"; 
} 
$opt.="</select>"; 

然後,您可以使用此爲:

echo $opt;