0

你好 5 天我真的一直在搜索和尝试,但我想我不能排列树或者我不能真正理解如何用树格式回显一个选择框,比如

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

我的数据库结构是

编号 | parent_id | 姓名

我已经非常接近了,例如,我只是错过了一个 3er 级别的符号,等等。

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));


?>
4

1 回答 1

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;
}
于 2013-05-11T17:45:43.983 回答