PHP树更改父结构 [英] PHP Tree Change Parent Structure

查看:53
本文介绍了PHP树更改父结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想以其他方式(如Wordpress)更改父级的结构,如果父级是class,则添加类.

当前结构:

 < ul>< li>我的清单< ul>< li>菜单1</li>< ul>< li>菜单2</li>< ul>< li>菜单3</li></ul>< li>菜单4</li></ul>< li>菜单5</li></ul></li> 

我想要什么:

 < ul>< li>我的清单< li>菜单1< ul class ="sub-menu">< li>菜单2< ul class ="sub-menu">< li>菜单3</li></ul></li>< li>菜单4</li></ul></li>< li>菜单5</li></li></ul> 

代码:

  $ lists = array(大批('id'=>1,'父母'=>0,'名称'=>菜单1",),大批('id'=>2,'父母'=>1,'名称'=>菜单2",),大批('id'=>3,'父母'=>2,'名称'=>菜单3",),大批('id'=>4,'父母'=>1,'名称'=>菜单4",),大批('id'=>5,'父母'=>0,'名称'=>菜单5",));?>< ul>< li>我的清单<?php函数make_list($ lists,$ parent = 0){$ children = array_filter($ lists,function($ v)use($ parent){return $ v ['parent'] == $ parent;});if(!count($ children))返回;回声< ul>";foreach($ children as $ child){回声< li> {$ child ['name']}</li>";make_list($ lists,$ child ['id']);}回声</ul>";}make_list($ lists);?></li></ul> 

解决方案

您可以对跟踪菜单级别的功能进行少量更改来做到这一点:

  function make_list($ lists,$ parent = 0,$ level = 0){$ children = array_filter($ lists [0],function($ v)use($ parent){return $ v ['parent'] == $ parent;});如果(!count($ children))返回;回声< ul".($ level> 0?'class ="sub-menu"':'').> \ n";foreach($ children as $ child){回声< li> {$ child ['name']}</li> \ n";make_list($ lists,$ child ['id'],++ $ level);}回声</ul> \ n";}make_list($ lists); 

I want to change structure of parent other way like Wordpress and add class if is parent.

Current Structure:

<ul>
    <li>My List
        <ul>
            <li>Menu 1</li>
            <ul>
                <li>Menu 2</li>
                <ul>
                    <li>Menu 3</li>
                </ul>
                <li>Menu 4</li>
            </ul>
            <li>Menu 5</li>
        </ul>
    </li>

What i want:

<ul>
    <li>My List
        <li>Menu 1
            <ul class="sub-menu">
                <li>Menu 2
                    <ul class="sub-menu">
                        <li>Menu 3</li>
                    </ul>
                </li>
                <li>Menu 4</li>
            </ul>
        </li>
        <li>Menu 5</li>
    </li>
</ul>

Code:

$lists = array(
    array(
        'id' => 1,
        'parent' => 0,
        'name' => 'Menu 1',
    ),
    array(
        'id' => 2,
        'parent' => 1,
        'name' => 'Menu 2',
    ),
    array(
        'id' => 3,
        'parent' => 2,
        'name' => 'Menu 3',
    ),
    array(
        'id' => 4,
        'parent' => 1,
        'name' => 'Menu 4',
    ),
    array(
        'id' => 5,
        'parent' => 0,
        'name' => 'Menu 5',
    )
);
?>
<ul>
    <li>My List
    <?php
    function make_list($lists, $parent = 0) {
        $children = array_filter($lists, function ($v) use($parent) { return $v['parent'] == $parent; });
        if(!count($children)) return;
        echo "<ul>";
        foreach ($children as $child) {
            echo "<li>{$child['name']}</li>";
            make_list($lists, $child['id']);
        }
        echo "</ul>";
    }
    make_list($lists);
    ?>
    </li>
</ul>

解决方案

You can do that with a minor change to the function to track the menu level:

function make_list($lists, $parent = 0, $level = 0) {
    $children = array_filter($lists[0], function ($v) use($parent) { return $v['parent'] == $parent; });
    if (!count($children)) return;
    echo "<ul" . ($level > 0 ? ' class="sub-menu"' : '') . ">\n";
    foreach ($children as $child) {
        echo "<li>{$child['name']}</li>\n";
        make_list($lists, $child['id'], ++$level);
    }
    echo "</ul>\n";
}
make_list($lists);

这篇关于PHP树更改父结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆