php mysql 类别树 ul

php mysql categories tree ul

我创建了一个 php 函数来显示类别树,但我无法获得我需要的输出。

HTML 需要输出:

   <ul>
        <li>
         <a href="#">Main menu</a>
           <ul>
              <li class="has-child-menu"><a href="#">Second Level</a>
           <ul class="thired-level">
              <li><a href="index.html">Thired Level 1</a></li>
              <li><a href="index.html">Thired Level 2</a></li>
           </ul>
           </li>
          </ul>
          </li>
    </ul>

这是我从数据库中获取类别的函数

 function categoryTree($parent_id = 0){
        global $db;
        $query = $db->query("SELECT * FROM categories WHERE parent_id = $parent_id ");

        if($query->num_rows > 0){
            while($row = $query->fetch_assoc()){
                echo $row['category_name'];
                categoryTree($row['id'] );
            }
        }
    }

您可以编写一个函数来创建数据库数据的平面数组:

function readData ($db) 
{
    $data  = [];
    $query = $db->query("SELECT * FROM categories WHERE parent_id = $parent_id ");

    if($query->num_rows > 0){
        while($row = $query->fetch_assoc()){
            $data[] = $row;
        }
    }

    return $data;
}

然后你需要一个递归函数来构建你的嵌套数组,如下所示:

function buildTree(array $elements, $parentId = 0) {
    $branch = [];

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}

最后分别调用函数:

$data = readData();
$tree = buildTree($data);