Melakukan hal ini secara teori kita hanya membutuhkan sebuah varibel array yang memiliki nilai sesuai dengan data pada tabel "menu" di basis data, kemudian mengecek apakah menu memiliki sub-menu atau tidak dan mengecek sub-menu memuliki sub-sub-menu atau tidak, begitu seterusnya hingga seluruh record menu selesai dicek.
Secara teori memang mudah, namun pada penerapannya ternyata banyak teman-teman programer yang mahir sekalipun sedikit kesulitan untuk membuat pohon array seperti ini.
Untuk itu saya memposting source code untuk membangun pohon array dan mencetaknya dalam format unordered list. Silhakan Anda salin secara bebas.
$nav = Array
(
Array
(
'id' => 27,
'name' => 'home',
'link' => 'home.html',
'parent' => 0
),
Array
(
'id' => 30,
'name' => 'about',
'link' => 'about.html',
'parent' => 27
),
Array
(
'id' => 31,
'name' => 'tour',
'link' => 'tour.html',
'parent' => 27
),
Array
(
'id' => 40,
'name' => 'me',
'link' => 'me.html',
'parent' => 30
),
Array
(
'id' => 50,
'name' => 'lombok',
'link' => 'you.html',
'parent' => 31
),
Array
(
'id' => 2,
'name' => 'lagi',
'link' => 'you.html',
'parent' => 0
),
Array
(
'id' => 100,
'name' => 'lagi',
'link' => 'you.html',
'parent' => 50
)
);
$nav_ordered = GenerateNavArray($nav);
echo(GenerateNavHTML($nav_ordered));
function GenerateNavArray($arr, $parent = 0)
{
$pages = Array();
foreach($arr as $page)
{
if($page['parent'] == $parent)
{
$page['sub'] = isset($page['sub']) ? $page['sub'] : GenerateNavArray($arr, $page['id']);
$pages[] = $page;
}
}
return $pages;
}
// loop the multidimensional array recursively to generate the HTML
function GenerateNavHTML($nav)
{
foreach($nav as $page)
{
$html .= '<li>';
$html .= '<a href="' . $page['link'] . '">' . $page['name'] . '</a>';
if(isset($page['sub'])){
$html .='<ul>';
$html .= GenerateNavHTML($page['sub']);
$html .='</ul>';
}
$html .= '</li>';
}
return $html;
}
?>
$nav = Array
(
Array
(
'id' => 27,
'name' => 'home',
'link' => 'home.html',
'parent' => 0
),
Array
(
'id' => 30,
'name' => 'about',
'link' => 'about.html',
'parent' => 27
),
Array
(
'id' => 31,
'name' => 'tour',
'link' => 'tour.html',
'parent' => 27
),
Array
(
'id' => 40,
'name' => 'me',
'link' => 'me.html',
'parent' => 30
),
Array
(
'id' => 50,
'name' => 'lombok',
'link' => 'you.html',
'parent' => 31
),
Array
(
'id' => 2,
'name' => 'lagi',
'link' => 'you.html',
'parent' => 0
),
Array
(
'id' => 100,
'name' => 'lagi',
'link' => 'you.html',
'parent' => 50
)
);
$nav_ordered = GenerateNavArray($nav);
echo(GenerateNavHTML($nav_ordered));
function GenerateNavArray($arr, $parent = 0)
{
$pages = Array();
foreach($arr as $page)
{
if($page['parent'] == $parent)
{
$page['sub'] = isset($page['sub']) ? $page['sub'] : GenerateNavArray($arr, $page['id']);
$pages[] = $page;
}
}
return $pages;
}
// loop the multidimensional array recursively to generate the HTML
function GenerateNavHTML($nav)
{
foreach($nav as $page)
{
$html .= '<li>';
$html .= '<a href="' . $page['link'] . '">' . $page['name'] . '</a>';
if(isset($page['sub'])){
$html .='<ul>';
$html .= GenerateNavHTML($page['sub']);
$html .='</ul>';
}
$html .= '</li>';
}
return $html;
}
?>
No comments:
Post a Comment