韶华小苑 |

时光不负终不老

您现在的位置是: 首页 > 文章 >

PHP 层级菜单数组处理 (转)

PHP 层级菜单数组处理 (转)

大帅哥 2020-09-23 暂无评论 技术,后端,php 10

原文链接:https://blog.csdn.net/chuta1347/article/details/100617744

封装好了,随时取用

// 递归实现层级数组
function getDarray($data,$parentField,$pid = 0){
    if (!is_array($data) || empty($data)) return $data;

    $result = array();
    foreach($data as $v){
        if($v[$parentField] == $pid){
            $v['lower_tag'] = 0;
            $items = getDarray($data,$parentField,$v['id']);
            if ($items) {
                $v['lower'] = $items;
                $v['lower_tag'] = count($items);
            }
            $result[] = $v;
        }
    }
    return $result;
}

使用方法如下:

$a = [
  ['id' => 1, 'name' => '一级菜单1', 'pid' => 0],
  ['id' => 2, 'name' => '二级菜单1', 'pid' => 1],
  ['id' => 3, 'name' => '二级菜单2', 'pid' => 1],
  ['id' => 4, 'name' => '三级菜单1', 'pid' => 3],
  ['id' => 5, 'name' => '一级菜单2', 'pid' => 0],
];

$b = getDarray($a, 'pid');

代码如下图:

代码图

原数组

生成的新数组

下面是代码解释:

// 递归实现层级数组
function getDarray($data,$parentField,$pid = 0){
    // 过滤非数组及空数组
    if (!is_array($data) || empty($data)) return $data;

    $result = array();
    foreach($data as $v){
        // 循环数组里的元素,一级级进行递归
        if($v[$parentField] == $pid){
            // 底下没有元素的层级,lower_tag == 0
            $v['lower_tag'] = 0;
            $items = getDarray($data,$parentField,$v['id']);
            if ($items) {
                // 下级元素存放于lower里
                $v['lower'] = $items;
                // lower_tag 表示其下级有几个元素
                $v['lower_tag'] = count($items);
            }
            $result[] = $v;
        }
    }
    return $result;
}

本文链接: https://hw13.cn/b1949098966e5f83ed6f4c58d673b057.html 最后修改时间: 2020-09-27 19:51:24

瞅我来气不?用红包砸死我吧

赞赏作者
扫一扫支付