PHP两种实现无级递归分类的方法

PHP两种实现无级递归分类的方法

在开发中,经常需要将数据进行分类,分成无限级分类,本文介绍PHP中两种实现无级递归分类的方法。

方法一:使用递归函数实现

递归函数指的是调用自身函数来达到循环目的的一种方法。递归函数是函数内部直接或间接地调用自身的一种函数调用方式。

分类数组如下所示:

$category = array(
    array('id'=>1, 'name'=>'电器', 'parent_id'=>0),
    array('id'=>2, 'name'=>'手机', 'parent_id'=>1),
    array('id'=>3, 'name'=>'电视', 'parent_id'=>1),
    array('id'=>4, 'name'=>'小米', 'parent_id'=>2),
    array('id'=>5, 'name'=>'华为', 'parent_id'=>2),
    array('id'=>6, 'name'=>'TCL', 'parent_id'=>3),
    array('id'=>7, 'name'=>'海信', 'parent_id'=>3),
);

实现代码如下:

function cate($category, $parent_id=0)
{
    $arr = array();
    foreach($category as $k=>$v)
    {
        if($v['parent_id'] == $parent_id)
        {
            $v['child'] = cate($category,$v['id']);
            $arr[]=$v;
        }
    }
    return $arr;
}

print_r(cate($category));

输出结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 电器
            [parent_id] => 0
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 手机
                            [parent_id] => 1
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [name] => 小米
                                            [parent_id] => 2
                                            [child] => Array
                                                (
                                                )
                                        )
                                    [1] => Array
                                        (
                                            [id] => 5
                                            [name] => 华为
                                            [parent_id] => 2
                                            [child] => Array
                                                (
                                                )
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [id] => 3
                            [name] => 电视
                            [parent_id] => 1
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 6
                                            [name] => TCL
                                            [parent_id] => 3
                                            [child] => Array
                                                (
                                                )
                                        )
                                    [1] => Array
                                        (
                                            [id] => 7
                                            [name] => 海信
                                            [parent_id] => 3
                                            [child] => Array
                                                (
                                                )
                                        )
                                )
                        )
                )
        )
)

方法二:使用“引用”方式进行递归编写

“引用”指的是在函数内部直接对实参进行修改,从而达到修改外部变量的效果。在递归函数编写过程中,如果采用值传递,就需要在递归调用函数之后将返回的结果再传递给上级函数,非常麻烦。而采用引用方式,可以直接修改上级传递的数组。

实现代码如下:

function cate(&$category, $parent_id=0){
    $arr = array();
    foreach($category as $key=>&$value){
        if($value['parent_id'] == $parent_id){
            $value['child'] = cate($category, $value['id']);
            $arr[] = $value;
        }
    }
    return $arr;
}

print_r(cate($category));

输出结果同方法一。

通过以上两种方法,可以快速与简便地实现无级递归分类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP两种实现无级递归分类的方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Mac实用操作技巧(二)

    Mac实用操作技巧(二) 如果你是一个Mac用户,你可能已经看到Mac已经有很好的易用性和用户友好的设计。但是,仍然有很多操作技巧可以帮助你在Mac上的工作效率更高。以下是一些Mac实用的操作技巧,可以帮助你节省时间和增加你的生产力。 1. 使用截图工具 Mac内置的截图工具可以迅速地截取你屏幕上的任意区域。你可以按住Command + Shift + 4,…

    其他 2023年3月28日
    00
  • Android4.4 访问外部存储详解及实例

    Android4.4 访问外部存储详解及实例 在Android 4.4及以上的版本中,访问外部存储需要进行特殊处理。以下是详细的步骤: 在AndroidManifest.xml文件中添加权限声明: xml <uses-permission android:name=\”android.permission.WRITE_EXTERNAL_STORAGE\…

    other 2023年10月13日
    00
  • Vue使用axios发送请求并实现简单封装的示例详解

    Vue是一款流行的JavaScript框架,用于构建单页面应用程序。而axios则是一款流行的JavaScript库,用于与后端服务器进行数据交互。在进行Vue开发时,使用axios来发送数据请求是非常常见的操作。为了提高代码的复用性,我们通常会对axios进行简单的封装,以便在项目中随时使用。 以下是实现Vue中使用axios发送请求并进行简单封装的步骤和…

    other 2023年6月25日
    00
  • oracle删除数据文件

    Oracle删除数据文件 Oracle数据库是一种大型、高度复杂的管理系统,因此在进行数据库维护和管理时可能会遇到许多问题,例如删除数据文件。在本篇文章中,我们将讨论如何在Oracle数据库中删除数据文件。 前置条件 在删除 Oracle 数据文件之前,必须确保以下事项: 确保要删除的文件已经备份。 确保当前没有进程在使用该文件。 确保该文件不是必需的。 请…

    其他 2023年3月29日
    00
  • ajax的异步操作及页面重定向跳转

    Ajax的异步操作及页面重定向跳转 在现代Web应用中,Ajax已成为不可或缺的一部分,它可以让我们在不刷新整个页面的情况下,向服务器发送请求并获取数据,从而实现动态更新页面的效果。本文将介绍Ajax的异步操作以及如何在Ajax中实现页面重定向跳转。 Ajax异步操作 异步操作是指不需要等待任务完成就可以继续执行下一个操作。Ajax的异步操作就是通过XMLH…

    其他 2023年3月28日
    00
  • 线性回归中的r*2平方值

    线性回归中的R²平方值攻略 线性回归是一种用于建立变量之间线性关系的技术。在线性回归中,R²平值是一种用于衡量模型合程度的指标。本攻略将详细介绍R²平方值的概念、计算方法应用,并提供两个示例。 R²平方值的概念 R²平方值是一种用于衡量线性回归模拟合程度的指标。R²平方值的取值范围在0到1之间,其中0表示模型不拟合数据,1表示模型完全拟合数据。 R²平方值可…

    other 2023年5月9日
    00
  • 基于Java 注解(Annotation)的基本概念详解

    基于Java 注解(Annotation)的基本概念详解 什么是Java注解? Java注解(Annotation),也被称为元数据,是Java语言中的一种特殊语法元素,可以在不改变程序运行逻辑的情况下,对类、方法、变量、参数等各种程序结构进行标注和说明,为程序的正确性、安全性、稳定性、可读性以及各种功能需求的实现提供了基础的支持。 Java注解的种类 Ja…

    other 2023年6月26日
    00
  • css触发点击事件focus

    CSS触发点击事件focus 在网页开发中,为元素添加交互效果和操作性是非常重要的任务。其中,鼠标点击事件是最常见的一种交互方式。然而,有时候我们需要通过 CSS 来触发点击事件,这时就需要用到 focus 事件了。本文将介绍如何使用 focus 来实现 CSS 触发点击事件。 :focus 伪类 在 CSS 中,focus 事件是通过 :focus 伪类来…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部