[英]PHP Recursive navigation
所以我有關於遞歸數組的問題。 我想要的是從數據庫中獲取一個PHP遞歸數組,這樣我就可以創建帶有子菜單的導航菜單,而無需創建另一個表。
這是我到目前為止的功能;
function getMenu($tree = null){
$tree2 = array();
$tree = getPages();
foreach($tree as $i => $item){
if($item->parent_id == $item->ID){
$tree2[$item->ID] = $item;
$tree2[$item->ID]['submenu'] = getMenu($tree, $item->ID);
}
}
return $tree2;
}
為了清楚起見,我不是自己創建此功能的,而是從http://www.jugbit.com/php/php-recursive-menu-with-1-query/獲得的,並在我認為合適的地方進行了調整
$ tree變量來自此函數;
function getPages($limit = null,$sort = null) {
global $db;
$query = $db->prepare('SELECT * FROM pages ORDER BY Position');
$query->execute();
return $query->fetchAll(PDO::FETCH_CLASS);
}
現在,過去兩天來,我一直在努力解決問題,以弄清我做錯了什么。
如果我打印getMenu函數,我得到的只是一個空數組,但我不知道為什么。 它確實得到了正確的foreach,我不認為這是問題,但我不確定100%。
我希望這個問題很清楚,但如果不是這樣,我很抱歉,並將在需要的地方澄清。
提前致謝
在getPages
,如果希望它返回一個關聯數組,則需要執行以下操作:
return $query->fetchAll(PDO::FETCH_ASSOC);
然后您的getMenu
看起來像:
function getMenu($tree = null, $parent = 0) {
if (!isset($tree))
$tree = getPages();
$tree2 = array();
foreach($tree as $i => $item) {
if($item['id'] == $parent) {
$tree2[$item['id']] = $item;
$tree2[$item['id']]['submenu'] = getMenu($tree, $item['id']);
}
}
return $tree2;
}
您的代碼有很多問題...
首先,您可以通過3種不同的方式使用名為$tree
的變量,而且我很確定您會覆蓋該變量的內容而沒有任何意義。
$ tree是函數的參數,然后在$tree = getPages();
行中覆蓋它$tree = getPages();
-因此,傳入的任何參數都消失了。 然后,將其用作foreach($tree as $i => $item)
行中的迭代器-因此,這里的內容再次被覆蓋。
查看如果解決此問題會發生什么。
其次,您的SQL語句檢索整個“頁面”表,而不是當前頁面的子代。
第三,當您遞歸時,您傳入了第二個參數,但是在函數聲明中沒有該占位符,因此該參數逐漸消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.