如何回显树选择选项列表PHP

时间:2013-05-11 17:36:02

标签: php sql select option

你好5天我真的一直在寻找和尝试,但我认为我不能排列树或我不能真正理解如何回应树形式的选择框像

<option>Workstations</option>
<option>--Macs</option>
<option>--Windows</option>
<option>Software</option>
<option>--Image editing</option>
<option>----Pro</option>
<option>----Semi pro</option>

我的数据库结构是

id | parent_id |名称

我一直非常接近这里,我只是错过了3级关卡,依此类推。

https://stackoverflow.com/questions/16474767/asign-symbol-to-subcategory-inside-subcategory-in-selectbox-php

修改

如何从我的数据库结构中构建这样的数组,即时学习,我还没有学习数组

$datas = array(
    array('id' => 1, 'parent' => 0, 'name' => 'Page 1'),
    array('id' => 2, 'parent' => 1, 'name' => 'Page 1.1'),
    array('id' => 3, 'parent' => 2, 'name' => 'Page 1.1.1'),
    array('id' => 4, 'parent' => 3, 'name' => 'Page 1.1.1.1'),
    array('id' => 5, 'parent' => 3, 'name' => 'Page 1.1.1.2'),
    array('id' => 6, 'parent' => 1, 'name' => 'Page 1.2'),
    array('id' => 7, 'parent' => 6, 'name' => 'Page 1.2.1'),
    array('id' => 8, 'parent' => 0, 'name' => 'Page 2'),
    array('id' => 9, 'parent' => 0, 'name' => 'Page 3'),
    array('id' => 10, 'parent' => 9, 'name' => 'Page 3.1'),
    array('id' => 11, 'parent' => 9, 'name' => 'Page 3.2'),
    array('id' => 12, 'parent' => 11, 'name' => 'Page 3.2.1'),
    );

这个数组会使这段代码有效,=(,我认为

<?PHP 

$datas = mysql_query("SELECT id, parent_id, name FROM category");

function generatePageTree($datas, $depth = 0, $parent = 0){
    if($depth > 1000) return ''; // Make sure not to have an endless recursion
    $tree = '';
    for($i=0, $ni=count($datas); $i < $ni; $i++){
        if($datas[$i]['parent'] == $parent){
            $tree .= str_repeat('-', $depth);
            $tree .= $datas[$i]['name'] . '<br/>';
            $tree .= generatePageTree($datas, $depth+1, $datas[$i]['id']);
        }
    }
    return $tree;
}

echo(generatePageTree($datas));


?>

1 个答案:

答案 0 :(得分:0)

我会使用一些for循环和递归函数来做到这一点。它的作用几乎就是从查询中获取每个结果,并在结果中搜索子项。使用获取所有行的id和parent_id的查询。您还需要一个函数将结果转换为二维数组,第一层是行,然后列$result[0]['ID'];将是第一行的ID。

您可以使用

之类的查询
SELECT id, parent_id, name from YOUR_TABLE_HERE;

  $num=count($results);
  for($i=0;$i<$num;$i++) {
       $id=$results[$i]['id'];
       if($results[$i]['parent_id']===null) {
             echo "<option>".$results[$i]['name']."</option>";
        }
       for($j=0;$j<$num;$j++) {
           if($results[$j]['parent_id']==$id) {
                search($results[$j][$id],$results,"-");
            }
       }
    }
 //the level_delim is just the string that signifies the level i.e. ---
  function search($id, $results,$level_delim) {
     $num=count($results);
     for($i=0;$i<$num;$i++) {
           if($results[$i]['parent_id']==$id) {
                echo "<option>".$level_delim."-".$results[$i]['name']."</option>"
                search($results[$i]['id],$results,$level_delim."-");
            }
      }
 }
  function allResults(mysqli_result $result) {
   $array=array();
   for($row=0;$row<mysqli_num_rows($result);$row++) {       //get all the rows and gett array
       $array[$row]=  mysqli_fetch_assoc($result);
   }
   return $array;
}