美文网首页
php无限极分类 2023-02-23

php无限极分类 2023-02-23

作者: 阿然学编程 | 来源:发表于2023-02-22 20:18 被阅读0次
  • php 引用无限极分类
/**
 * 引用无限分类
 * @param array $list
 * @param string $pIdkey
 * @return array
 */
function generateTree(array $list, $pIdkey = 'pid')
{
    $items = [];
    foreach ($list as $v) {
        $items[$v['id']] = $v;
        $items[$v['id']]['children'] = [];
    }

    $tree = [];
    foreach ($items as &$item) {
        if (isset($items[$item[$pIdkey]])) {
            $items[$item[$pIdkey]]['children'][] = &$item;
        } else {
            $tree[] = &$item;
        }
    }
    unset($item);

    return $tree;
}


/**
 * 递归生成树形结构数组
 *
 * @param  array   $list   原始列表数据
 * @param  integer $pId    父节点ID,默认为0
 * @param  integer $level  当前层级,默认为0
 * @return array           树形结构数组
 */
function generateTree2(array $list, $parentId = 0, $level = 0)
{
    $tree = [];

    foreach ($list as $key => $item) {
        // 找到当前层级的子节点
        if ($item['pid'] == $parentId ) {
            $item['level'] = $level;
            unset($list[$key]); // 从原始列表中移除当前节点,减少后续的遍历次数
            $item['children'] = generateTree2($list, $item['id'], $level + 1); // 递归调用,生成子节点的树形结构
            $tree[] = $item;
        }
    }

    return $tree;
}



/**
 * 无限分类之菜单栏引用和递归(传入父级pid)
 * @param $list 二维数组
 * @param string $pid 父级pid,默认空
 * @param string $pk 默认key:'pid'
 * @param array $arr
 * @return array
 */
function generateTree($list, $pid = '', $pk = 'pid', &$arr = array())
{
    $items = [];

    foreach ($list as $v) {
        $items[$v['id']] = $v;
        $items[$v['id']]['children'] = [];
    }

    $tree = [];

    foreach ($items as $key => &$item) {
        if (is_numeric($pid)) {
            if ($item[$pk] == $pid) {
//                echo '递归';
                if (isset($items[$item['id']])) {
                    $item['children'] = generateTree($list, $item['id'], $pk, $arr);
                }
                $tree[] = &$item;
            }

        } else {
            if (isset($items[$item[$pk]])) {
//                echo '引用';
                $items[$item[$pk]]['children'][] = &$item;
            } else {
                $tree[] = &$item;
            }
        }
    }

    unset($item);

    return $tree;
}
  • 返回结果
Array
(
    [0] => Array
        (
            [id] => 114
            [name] => 一级分类
            [pid] => 0
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 125
                            [name] => 二级分类
                            [pid] => 114
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 171
                                            [name] => 三级分类
                                            [pid] => 125
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [id] => 126
                            [name] => 二级分类
                            [pid] => 114
                        )
                )

        )

    [1] => Array
    (
        ...省略
    )

    ...省略
)
  • 无限分类之面包屑导航(传入子级)
/**
 * 无限分类之面包屑导航(传入子级id)
 * @param array $data  二维数组
 * @param int $id   子级id
 * @param array $arr
 * @return array
 */
function getSonToLinkAAABBB(array $data, int $id, array &$arr = []): array
{
    foreach ($data as $value) {
        //这里只会找父级
        if ($value['id'] == $id) {
            //这里会一直找到最顶级
            getSonToLinkAAABBB($data, $value['pid'], $arr);
            $arr[] = $value; //从最顶级开始插入数据,再跳出当前级别递归,往外级递归继续插入。
        }
    }
    return $arr;
}
array(2) {
  [0] => array(3) {
    ["id"] => int(2)
    ["pid"] => int(0)
    ["city"] => string(6) "广东"
  }
  [1] => array(3) {
    ["id"] => int(6)
    ["pid"] => int(2)
    ["city"] => string(6) "深圳"
  }
}

相关文章

  • php实现无限极分类

    一、两种实现php无限极分类 设置原始数据 1. 使用php递归实现php无限极分类 通过foreach循环实现无...

  • PHP 无限极分类

    概述   在实际工作中,经常要用到无限极分类。如导航表等等。到网上一搜php无限极分类,很多,但好多都是一个,并且...

  • PHP无限极分类

    要了解这两种方式具体内容,可以去查看这篇博客: 左右值无限分类实现算法 本文主要提供两种将符合无限极分类格式的二维...

  • php无限极分类

    递归--无限极分类 递归--子孙树转二维数组 可以配合Nestable使用 递归--获取树所有叶子节点 结果1 结...

  • PHP 无限极分类

    1.循环迭代实现无限极分类 输出结果如下: 分析:这个算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算...

  • PHP无限极分类技术

    什么是无限分类? 无限分类就是一个分类下面可以创建多个子类,而其子类下面亦可以创建不同子类,如此往复,没有终点; ...

  • php无限分类组件

    PHP系统树图 github项目地址 PHP系统树图可快速的处理无限极分类的业务需求 提供两种不同的数据结构和三种...

  • php 引用算法无限极分类

  • PHP实现无限极分类的两种方式,递归和引用

    PHP实现无限极分类的两种方式,递归和引用 转载叶落无痕123 最后发布于2018-09-19 19:29:03 ...

  • 无限极分类原理与实现

    前言 无限极分类是我很久前学到知识,今天在做一个项目时,发现对其概念有点模糊,所以今天就来说说无限极分类。 首先来...

网友评论

      本文标题:php无限极分类 2023-02-23

      本文链接:https://www.haomeiwen.com/subject/jjoakdtx.html