当前位置:首页 > PHP开发 > PHP技巧 > 正文内容

php的无限极分类

Git开源网2022-04-11 23:01:55PHP技巧595

递归实现无限极分类(二维数组)

递归实现无限极分类 (多维数组)

引用实现无限极分类 (多维数组)

<?php
// 原文:https://blog.csdn.net/tiansidehao/article/details/79025359
// 原文:https://blog.csdn.net/qishouzhang/article/details/47204359
 
$array = array(
    array('id' => 2, 'pid' => 0, 'name' => 'b'),
    array('id' => 3, 'pid' => 1, 'name' => 'a-1'),
    array('id' => 1, 'pid' => 0, 'name' => 'a'),
    array('id' => 4, 'pid' => 2, 'name' => 'b-1'),
    array('id' => 5, 'pid' => 2, 'name' => 'b2'),
    array('id' => 6, 'pid' => 5, 'name' => 'b-2-1'),
    array('id' => 7, 'pid' => 5, 'name' => 'b-2-2'),
    array('id' => 8, 'pid' => 3, 'name' => 'a-1-1'),
    array('id' => 9, 'pid' => 1, 'name' => 'a-2'),
);
 
/**
 * 递归实现无限极分类(二维数组)
 * @param $array 数据
 * @param $pid 父ID
 * @param $level 分类级别
 * @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进
 */
 
function getTree0($array, $pid = 0, $level = 1){
 
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为1,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            getTree($array, $value['id'], $level+1);
 
        }
    }
    return $list;
}
 
/**
 * 递归实现无限极分类 (多维数组)
 * @param $array 数据
 * @param $pid 父ID
 * @return $tree
 */
 
function getTree1($array,$pid = 0){
    // 存放排序数组
    $tree = array();
    foreach($array as $k => $v){
        if($v['pid'] == $pid){
            //递归获取子记录
            $v['child'] = getTree1($array,$v['id']);//调用自身
            if($v['child'] == null){ // 没有子类
                // 删除 空子类
                unset($v['child']);
            }
            // 删除已处理节点,增加性能
            unset($array[$k]);
            $tree[] = $v;
        }
    }
    return $tree;
}
 
/**
 * 引用实现无限极分类  (多维数组)
 * @param $array 数据
 * @return $tree
 */
 
function getTree2($array)
{
    // 格式化数组,让数组索引 = 对应值的 ID
    $items  = array();
    foreach ($array as $key => $val) {
        $items [$val['id']] = $val;
    }
    // 接收处理后的数据
    $tree = array();
    foreach ($items as $k => $v) {
        // 当前元素是否有父亲
        if(isset($items [$v['pid']])){
            // 有就把他放到父亲下面  且此元素还能被修改(引用传值)
            // $arr[$item['pid']]['child'][] = &$arr[$item['id']];
            $items[$v['pid']]['child'][] = &$items[$k];
        }else{
            // 没有就放入数组 且还能被修改(引用传值)
            // $tree[] = &$arr[$item['id']];
            $tree[] = &$items[$k];
        }
    }
    return $tree;
}
 
echo "<pre>";
print_r(getTree2($array));
 
function infinite($list = [],$parent_id = 0,$deep = 0){
    static $arr = [];
    foreach ($list as $v){
        if($v['p_id'] == $parent_id){
            $v['deep'] = $deep;
            $arr[] = $v;
            infinite($list,$v['id'],$deep + 1);
        }
    }
    return $arr;
}


扫描二维码推送至手机访问。

版权声明:本文由Git开源网_git开源代码资源网_git开源博客发布,如需转载请注明出处。

本文链接:http://gitoscc.com/?id=869

相关文章

李炎恢PHP第一季视频教程

李炎恢PHP第一季视频教程课程简介:PHP是一种目前最流行的服务端Web程序开发语言之一。PHP主要的特点是语法简单易于学习、功能强大、灵活易用。在融合了现代编程语言的一些最佳特性后,PHP、Apache和MySQL的组合已成为Web服务器...

Github上的PHP资源汇总大全

国外程序员ziadoz 在Github上收集整理了PHP的各种资源,内容包括模板、框架、数据库、安全等方面的库和工具。这篇文章,汇总了这些PHP资源,供各位PHP学习者和程序员参考。废话不多说,下面就是详细的资料列表。依赖管理——用于依赖管...

免费清新的PHP MYSQL博客网址导航源码

免费清新的PHP MYSQL博客网址导航源码

免费清新的PHP MYSQL博客网址导航源码[Download]资源名称:免费清新的PHP MYSQL博客网址导航源码下载地址:https://www.lanzoui.com/i2648ni [/Download]...

php的mysql数据库操作类,很强大

php的mysql数据库操作类,很强大<?php   /*  * mysql数据库 DB类  * @package db  * ...

PHP项目安装程序的install.lock文件例子

一般一个PHP项目的安装部分(install.php)会有一个安装完成后的验证机制,就是写出一个install.lock文件,防止再次访问安装地址进行再次安装。$fp=fopen("install.lock","...

PHP基础视频 - 简单留言板应用程序

PHP基础视频 - 简单留言板应用程序

课程目标:通过本课程的学习,可以帮助学员熟练掌握PHP相关基础内容(包括PHP基本语法、PHP连接数据库、PHP Web核心技术等),同时也引导学生熟悉PHP网站项目开发的基本流程,再次为后续课程(PHP中级、PHP高级开发)打下坚实的基础...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。