MySQL導航表使用id,parent_id,name具有無限的導航深度。我正在使用遞歸函數來創建多維數組。我一直試圖小時是創建放路徑(/ mainitem /子項目/ subsubsitem/subsubsubitem /等菜單表的menu_nl功能:使用多維PHP數組爲MySQL數據庫中的每個菜單項創建友好的URL
$ Q =「 SELECT m.id,m.parent_id,m.menu_nl,parents.menu_nl AS'parent' FROM menu AS m LEFT JOIN菜單AS父母ON父母.id = m.parent_id ORDER BY m.parent_id ASC,m.volgorde ASC 「;
$ r = $ dbcon-> query($ q); $ pages = $ r-> fetchAll(PDO :: FETCH_ASSOC);
function create_array(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = create_array($elements, $element['id']);
if ($children) {
$element[$element['menu_nl']] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$ tree = create_array($ pages);
一個var_export看起來這樣:
array (
0 =>
array (
'id' => 34,
'parent_id' => 0,
'menu_nl' => 'INTRODUCTION',
'parent' => NULL,
),
1 =>
array (
'id' => 36,
'parent_id' => 0,
'menu_nl' => 'TEAM',
'parent' => NULL,
'TEAM' =>
array (
0 =>
array (
'id' => 133,
'parent_id' => 36,
'menu_nl' => 'Team member A',
'parent' => 'TEAM',
),
1 =>
array (
'id' => 134,
'parent_id' => 36,
'menu_nl' => 'Team member B',
'parent' => 'TEAM',
),
),
),
2 =>
array (
'id' => 50,
'parent_id' => 0,
'menu_nl' => 'PRODUCTS',
'parent' => NULL,
'PRODUCTS' =>
array (
0 =>
array (
'id' => 151,
'parent_id' => 50,
'menu_nl' => 'SUB PRODUCT A',
'parent' => 'PRODUCTS',
'SUB PRODUCT A' =>
array (
0 =>
array (
'id' => 154,
'parent_id' => 151,
'menu_nl' => 'SUB OF SUB PRODUCT A',
'parent' => 'SUB PRODUCT A',
'SUB OF SUB PRODUCT A' =>
array (
0 =>
array (
'id' => 156,
'parent_id' => 154,
'menu_nl' => 'SUB OF SUB OF SUB PRODUCT A',
'parent' => 'SUB OF SUB PRODUCT A',
),
),
),
),
),
1 =>
array (
'id' => 152,
'parent_id' => 50,
'menu_nl' => 'SUB PRODUCT B',
'parent' => 'PRODUCTS',
'SUB PRODUCT B' =>
array (
0 =>
array (
'id' => 155,
'parent_id' => 152,
'menu_nl' => 'SUB OF SUB PRODUCTB',
'parent' => 'SUB PRODUCT B',
),
),
),
2 =>
array (
'id' => 153,
'parent_id' => 50,
'menu_nl' => 'SUB PRODUCT C',
'parent' => 'PRODUCTS',
),
),
),
3 =>
array (
'id' => 40,
'parent_id' => 0,
'menu_nl' => 'CONTACT',
'parent' => NULL,
'CONTACT' =>
array (
0 =>
array (
'id' => 139,
'parent_id' => 40,
'menu_nl' => 'Contact form',
'parent' => 'CONTACT',
),
1 =>
array (
'id' => 143,
'parent_id' => 40,
'menu_nl' => 'How to get there',
'parent' => 'CONTACT',
),
),
),
)
我覺得這個還是有點過於抽象和廣泛。你能提供一些真正的數據來玩嗎?嘗試'var_export($ array);'以獲得有形的東西在這裏發佈。並且不應該'返回$ pad;'返回$ path;'在你的函數中? –
你是對的傑夫,$ pad當然是$路徑中的回報。我已經添加了一塊數組,謝謝 –
如果您使用'var_export'而不是'print_r',它可以讓我們輕鬆地複製/粘貼功能代碼。 –