Php 从多维无限父子树创建菜单
有人吗 提前谢谢,如果您需要任何其他信息,请告诉我 我试图将多维数组转换为多嵌套html导航菜单。我从另一个答案中得到了它的jist,所以: 我想弄清楚的是,如何在url中为下一个子数组保留顶级父链接(以及任何后续子页面链接)。当函数调用自身来构建数组时,我尝试将链接传递给函数,但这只保留了最近的父链接 例如: 家 关于Php 从多维无限父子树创建菜单,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,有人吗 提前谢谢,如果您需要任何其他信息,请告诉我 我试图将多维数组转换为多嵌套html导航菜单。我从另一个答案中得到了它的jist,所以: 我想弄清楚的是,如何在url中为下一个子数组保留顶级父链接(以及任何后续子页面链接)。当函数调用自身来构建数组时,我尝试将链接传递给函数,但这只保留了最近的父链接 例如: 家 关于 -信息 --子页 变成: 家 关于 关于/信息 关于/信息/子页面 以下是一个示例阵列: Array ( [0] => stdClass Object (
-信息
--子页 变成: 家 关于 关于/信息 关于/信息/子页面 以下是一个示例阵列:
Array
(
[0] => stdClass Object
(
[id] => 12
[parent] => 11
[name] => Sub Page
[link] => sub_page
[target] => _self
)
[1] => stdClass Object
(
[id] => 14
[parent] => 12
[name] => Test
[link] => test_test
[target] => _self
)
[2] => stdClass Object
(
[id] => 9
[parent] => 0
[name] => Home
[link] => home
[target] => _self
)
[3] => stdClass Object
(
[id] => 11
[parent] => 10
[name] => Info
[link] => info
[target] => _self
)
[4] => stdClass Object
(
[id] => 13
[parent] => 10
[name] => Test
[link] => test
[target] => _self
)
[5] => stdClass Object
(
[id] => 10
[parent] => 0
[name] => About
[link] => about
[target] => _self
)
)
下面是我正在使用的代码:
function create_menu_array($arr, $parent = 0){
$pages = array();
foreach($arr as $page){
if($page->parent == $parent){
$page->sub = isset($page->sub) ? $page->sub : $this->create_menu_array($arr, $page->id);
$pages[] = $page;
}
}
return $pages;
}
function create_menu_html($nav){
$html = '';
foreach($nav as $page){
$html .= '<ul><li>';
$html .= '<a href="' . base_url().$page->link . '" target="'.$page->target.'">' . $page->name . '</a>';
$html .= $this->create_menu_html($page->sub);
$html .= '</li></ul>';
}
return $html;
}
函数创建菜单数组($arr,$parent=0){
$pages=array();
foreach($arr作为$page){
如果($page->parent==$parent){
$page->sub=isset($page->sub)?$page->sub:$this->创建菜单数组($arr,$page->id);
$pages[]=$pages;
}
}
返回$pages;
}
函数创建菜单html($nav){
$html='';
foreach(资产净值为$page){
$html.='- ';
$html.='';
$html.=$this->create\u menu\u html($page->sub);
$html.='
';
}
返回$html;
}
具有递归功能的解决方案:
例如:
您的答案与问题中的要求不符,如果我弄错了,请告诉我。
<?php
function array_process_for_ids($items) {
$new_array = array();
foreach ($items as $item) {
$new_array[$item['id']] = $item;
}
return $new_array;
}
function menu($items) {
function menu_recursive($parent_item) {
global $items;
unset($items[$parent_item['id']]);
echo '<div style="padding-left: 15px;">';
echo '- '.$parent_item['name'];
foreach ($items as $item) {
if ($item['parent'] == $parent_item['id']) {
menu_recursive($item);
}
}
echo '</div>';
}
foreach ($items as $item) {
if ($item['parent'] == 0) menu_recursive($item);
}
}
$items = array(
array(
'id' => 10,
'parent' => 0,
'name' => 'Top Page 1',
'link' => 'top_page_1',
'target' => '_self'
),
array(
'id' => 12,
'parent' => 0,
'name' => 'Top Page 2',
'link' => 'top_page_2',
'target' => '_self'
),
array(
'id' => 25,
'parent' => 10,
'name' => 'Sub Page 1 of top page 1',
'link' => 'sub_page_1_of_top_page_1',
'target' => '_self'
),
array(
'id' => 26,
'parent' => 12,
'name' => 'Sub Page 1 of top page 2',
'link' => 'sub_page_1_of_top_page_2',
'target' => '_self'
),
array(
'id' => 28,
'parent' => 26,
'name' => 'Sub Page of sub page 1 of top page 2',
'link' => 'sub_page_of_sub_page_1_of_top_page_2',
'target' => '_self'
)
);
$items = array_process_for_ids($items);
menu($items);
?>