为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建二维数组到多级订单列表?

如何创建二维数组到多级订单列表?

PHP
一只甜甜圈 2021-12-24 09:26:36
我有一个 php 数组在下面,$two_dimention = array(array("id"=>4, "name" => "Home", "parent" => 0, "depth" => 0),array("id"=>5, "name" => "Menu 1", "parent" => 0, "depth" => 0),array("id"=>6, "name" => "Menu 2", "parent" => 0, "depth" => 0),array("id"=>8, "name" => "Menu 2.1", "parent" => 6, "depth" => 1),array("id"=>10, "name" => "Menu 2.1.1", "parent" => 8,  "depth" => 2),array("id"=>11, "name" => "Menu 2.1.2", "parent" => 8, "depth" => 2),array("id"=>9, "name" => "Menu 2.2", "parent" => 6, "depth" => 1),array("id"=>7, "name" => "Menu 3", "parent" => 0, "depth" => 0),array("id"=>18, "name" => "Menu 3.1", "parent" => 7, "depth" => 1),);根据这个 $two_dimention 数组,它将创建 HTML 中的多维订单列表,如下所示, <ul>    <li>Home</li>    <li>Menu 1</li>    <li>Menu 2        <ul>            <li>Menu 2.1                <ul>                    <li>Menu 2.1.1</li>                    <li>Menu 2.1.2</li>                </ul>            </li>            <li>Menu 2.2</li>        </ul>    </li>    <li>Menu 3        <ul>            <li>Menu 3.1</li>        </ul>    </li></ul>我怎样才能通过 PHP for/foreach 循环来做到这一点?
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

这是答案,使用ref从多维数组创建嵌套数组


function makeRecursive($d, $r = 0, $pk = 'parent', $k = 'id', $c = 'children')

{

    $m = [];

    foreach ($d as $e) {

        isset($m[$e[$pk]]) ?: $m[$e[$pk]] = [];

        isset($m[$e[$k]]) ?: $m[$e[$k]]   = [];

        $m[$e[$pk]][]                     = array_merge($e, [$c => &$m[$e[$k]]]);

    }

    return $m[$r]; // remove [0] if there could be more than one root nodes

}

function nested2ul($data)

{

    $result = [];

    if (sizeof($data) > 0) {

        $result[] = '<ul>';

        foreach ($data as $entry) {

            $result[] = sprintf(

                '<li>%s %s</li>',

                $entry['name'],

                nested2ul($entry['children'])

            );

        }

        $result[] = '</ul>';

    }

    return implode($result);

}

$temp= makeRecursive($two_dimention);

echo nested2ul($temp);


输出


<ul>

  <li>Home </li>

  <li>Menu 1 </li>

  <li>Menu 2

    <ul>

      <li>Menu 2.1

        <ul>

          <li>Menu 2.1.1 </li>

          <li>Menu 2.1.2 </li>

        </ul>

      </li>

      <li>Menu 2.2 </li>

    </ul>

  </li>

  <li>Menu 3

    <ul>

      <li>Menu 3.1 </li>

    </ul>

  </li>

</ul>


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信