woff 發表於 2017-3-16 08:11:57

如何用PHP及MySQL建立多層導覽列

在寫多層導覽列時,會從資料庫撈出資料
主要欄位有

cid,parent_id,name

以下是PHP代碼
//從TABLE撈出資料
$sql="SELECT * FROM net_class ORDER BY cid ASC";
$query=$db->query($sql);
while ($row_class=$db->fetch_array($query)) {
                //放入陣列                                                          $sm_class[]=array("cid"=>$row_class,"num"=>$row_class,"name"=>$row_class,"img"=>$row_class,"parent_id"=>$row_class);
}

function has_children($rows,$cid) {
          foreach ($rows as $rowf) {
                if ($rowf['parent_id'] == $cid)
                  return true;
          }
          return false;
}
      
function build_menu($rows,$parent=0)
{
          $result = "<ul>";
          foreach ($rows as $row)
          {
                if ($row['parent_id'] == $parent){
                  $result.= "<li>{$row}";
                  if (has_children($rows,$row['cid']))
                        $result.= build_menu($rows,$row['cid']);
                  $result.= "</li>";
                }
          }
          $result.= "</ul>";
          return $result;
}
echo build_menu($sm_class);
經過筆者實測,此種多重選單最為簡單明白

或是function buildTree(array $elements, $parentId = 0) {
    $branch = array();

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

    return $branch;
}

$tree = buildTree($rows);
參考文章
http://stackoverflow.com/questio ... sql-build-tree-menu


http://stackoverflow.com/questions/8587341/recursive-function-to-generate-multidimensional-array-from-database-result
頁: [1]
查看完整版本: 如何用PHP及MySQL建立多層導覽列