PHP无限级分类函数的方法实现

作者: 分类: php 发布时间: 2021-04-24 21:00 浏览人数:2
 

本文实例讲述了PHP无限极分类函数的实现方法。分享给大家供大家参考,具体如下:


在开发程序的时候,有时候,我们需要获取所有栏目(例如一级栏目、二级栏目、三级栏目等等),并按照父子关系形成树型结构。可以采取使用递归或者通过引用方式(php中引用类似C或者C++中的指针,只不过换一种说法而已)。

这里主要介绍通过递归方式实现无限极分类

思路:
  1. 即所有待处理的数据进行包装成下标为主键id(pk)的数组,便于有p_id获取对应的父栏目。
  2. 对包装的数据进行循环,如果为根节点,则将其引用添加到树中,否则,将其引用添加到其父类的子元素中。这样虽然树中,只是添加了根节点,但是每个根节点如果有子元素,其中包含了子元素的引用。故能形成树型。

代码如下:
<?php
$arr = [
    ['id' => 1, 'name' => '父1', 'p_id' => 0],
    ['id' => 2, 'name' => '父2', 'p_id' => 0],
    ['id' => 3, 'name' => '父3', 'p_id' => 0],
    ['id' => 4, 'name' => '儿1-1', 'p_id' => 1],
    ['id' => 5, 'name' => '儿1-2', 'p_id' => 1],
    ['id' => 6, 'name' => '儿1-3', 'p_id' => 1],
    ['id' => 7, 'name' => '儿2-1', 'p_id' => 2],
    ['id' => 8, 'name' => '儿2-1', 'p_id' => 2],
    ['id' => 9, 'name' => '儿3-1', 'p_id' => 3],
    ['id' => 10, 'name' => '儿3-1-1', 'p_id' => 9],
    ['id' => 11, 'name' => '儿1-1-1', 'p_id' => 4],
    ['id' => 12, 'name' => '儿2-1-1', 'p_id' => 7],
];

/**
 * 无限级分类
 *
 * @param array $origionArr 要进行分类的数组。(备注:这里最好使用"&$var"的形式,以便的减轻服务器内存压力)
 * @param int $p_id
 * @return array
 */
function infiniteOrder(&$origionArr, $p_id = 0)
{
    $result = [];

    foreach ($origionArr as $value) {
        if ($value['p_id'] !== $p_id) continue;

        $value['children'] = infiniteOrder(
            $origionArr, 
            $value['id']
        );
        
        $result[] = $value;
    }
    
    return $result;
}

var_dump(infiniteOrder($arr));

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!