2012-07-05 75 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;