简体   繁体   English

数组中的树菜单

[英]li tree menu from array

I have array: 我有数组:

parent 1 is first step! 父母1是第一步!

Array
(
    [0] => Array
        (
            [categoryID] => 1
            [parent] => 1
            [name] => 111
        )

    [1] => Array
        (
            [categoryID] => 2
            [parent] => 1
            [name] => 2222
        )

    [2] => Array
        (
            [categoryID] => 3
            [parent] => 2
            [name] => 3333
        )
    [3] => Array
        (
            [categoryID] => 4
            [parent] => 3
            [name] => 444
        )

)

In result I need tree structure with ul and li elements: 结果,我需要带有ul和li元素的树结构:

<ul>
 <li>111</li>
 <li>222
  <ul>
   <li>333
   <ul>
    <li>444</li>
   </ul>
   </li>
  </ul>
 </li>
</ul>

Thanks! 谢谢!

This array looks a lot like you got it from a database. 这个数组看起来很像是从数据库中获得的。 If that's the case, please just use an MVC framework. 如果是这种情况,请使用MVC框架。 It will make your life so much easier. 这将使您的生活变得更加轻松。

<?php

$input_array = array(
    array(
        'categoryID' => 1,
        'parent' => 1,
        'name' => 111,
    ),
    array(
        'categoryID' => 2,
        'parent' => 1,
        'name' => 2222,
    ),
    array(
        'categoryID' => 3,
        'parent' => 2,
        'name' => 3333,
    ),
    array(
        'categoryID' => 4,
        'parent' => 3,
        'name' => 444,
    )
);

function buildHtmlList($array)
{
    $maxlevel = 0;

    // just to be sure that the array keys are continuous
    $array = array_values($array);

    foreach ($array as $key => $value)
    {
        $previousparent = isset($array[$key - 1]['parent']) ? $array[$key - 1]['parent'] : null;
        $nextparent = isset($array[$key + 1]['parent']) ? $array[$key + 1]['parent'] : null;

        if ($value['parent'] != $previousparent)
        {
            echo "\n<ul>";
            ++$maxlevel;
        }

        echo "\n<li>" . $value['name'];

        if ($nextparent == $value['parent'])
            echo "</li>";
    }

    for ($i = 0; $i < $maxlevel; ++$i)
    {
        echo "\n</li>\n</ul>";
    }
}

buildHtmlList($input_array);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM