我正在尋找編寫一個函數,該函數需要一個頁面/類別的數組(從平面數據庫結果),並基於父ID生成一個嵌套的頁面/類別項目數組。我想遞歸地做到這一點,以便可以完成任何級別的嵌套。從數據庫結果生成多維數組遞歸函數
例如:我取一個查詢中的所有網頁,這是什麼樣的數據庫表看起來像
+-------+---------------+---------------------------+
| id | parent_id | title |
+-------+---------------+---------------------------+
| 1 | 0 | Parent Page |
| 2 | 1 | Sub Page |
| 3 | 2 | Sub Sub Page |
| 4 | 0 | Another Parent Page |
+-------+---------------+---------------------------+
這是我想與處理在結束了陣列我的視圖文件:
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[title] => Parent Page
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[title] => Sub Page
[children] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 1
[title] => Sub Sub Page
)
)
)
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Another Parent Page
)
)
我看,並試圖幾乎每一個解決方案,我已經遇到(還有這裏的很多人對堆棧溢出,但有沒有運氣得到的東西很通用,將兩個工作網頁和類別。
這是我收到的最接近的,但它不起作用,因爲我將孩子分配給一級父母。
function page_walk($array, $parent_id = FALSE)
{
$organized_pages = array();
$children = array();
foreach($array as $index => $page)
{
if ($page['parent_id'] == 0) // No, just spit it out and you're done
{
$organized_pages[$index] = $page;
}
else // If it does,
{
$organized_pages[$parent_id]['children'][$page['id']] = $this->page_walk($page, $parent_id);
}
}
return $organized_pages;
}
function page_list($array)
{
$fakepages = array();
$fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page');
$fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page');
$fakepages[2] = array('id' => 3, 'parent_id' => 2, 'title' => 'Sub Sub Page');
$fakepages[3] = array('id' => 4, 'parent_id' => 3, 'title' => 'Another Parent Page');
$pages = $this->page_walk($fakepages, 0);
print_r($pages);
}
你就不能與所有parent_ids的陣列和另一個陣列工作你的網頁? – djot 2011-12-21 09:17:50