php两种无限分类方法实例_php实例

一、递归方法

复制代码 代码如下:

$items = array(
array('id'=>1,'pid'=>0,'name'=>'一级11'),
array('id'=>2,'pid'=>0,'name'=>'一级12'),
array('id'=>3,'pid'=>1,'name'=>'二级21'),
array('id'=>4,'pid'=>3,'name'=>'三级31'),
array('id'=>5,'pid'=>1,'name'=>'二级22'),
array('id'=>6,'pid'=>3,'name'=>'三级32'),
array('id'=>7,'pid'=>6,'name'=>'四级41'),
);
$i = 0;
function formatTree($arr, $pid = 0){
$tree = array();
$temp = array();
global $i;
if($arr){
foreach($arr as $k=>$v){
if($v['pid'] == $pid){//
$temp = formatTree($arr, $v['id']);
$temp && $v['son'] = $temp;
$tree[] = $v;
}
}
}
return $tree;
}
print_r(formatTree($items));

二、非递归方法

复制代码 代码如下:

function genTree($items) {
    $tree = array(); //格式化好的树
    foreach ($items as $item)
        if (isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }
        else{
            $tree[] = &$items[$item['id']];
        }
    return $tree;
}

$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '一级11'),
    2 => array('id' => 2, 'pid' => 1, 'name' => '二级21'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '二级23'),
    4 => array('id' => 4, 'pid' => 9, 'name' => '三级31'),
    5 => array('id' => 5, 'pid' => 4, 'name' => '四级43'),
    6 => array('id' => 6, 'pid' => 9, 'name' => '三级32'),
    7 => array('id' => 7, 'pid' => 4, 'name' => '四级41'),
    8 => array('id' => 8, 'pid' => 4, 'name' => '四级42'),
    9 => array('id' => 9, 'pid' => 1, 'name' => '二级25'),
    10 => array('id' => 10, 'pid' => 11, 'name' => '二级22'),
    11 => array('id' => 11, 'pid' => 0, 'name' => '一级12'),
    12 => array('id' => 12, 'pid' => 11, 'name' => '二级24'),
    13 => array('id' => 13, 'pid' => 4, 'name' => '四级44'),
    14 => array('id' => 14, 'pid' => 1, 'name' => '二级26'),
    15 => array('id' => 15, 'pid' => 8, 'name' => '五级51'),
    16 => array('id' => 16, 'pid' => 8, 'name' => '五级52'),
    17 => array('id' => 17, 'pid' => 8, 'name' => '五级53'),
    18 => array('id' => 18, 'pid' => 16, 'name' => '六级64'),
);
print_r(genTree($items));

时间: 2024-12-23 09:51:28

php两种无限分类方法实例_php实例的相关文章

php两种无限分类方法实例

  这篇文章主要介绍了php两种无限分类方法实例,本文给出了递归方法和非递归方法实现的无限分类实例,需要的朋友可以参考下 一.递归方法 复制代码 代码如下: $items = array( array('id'=>1,'pid'=>0,'name'=>'一级11'), array('id'=>2,'pid'=>0,'name'=>'一级12'), array('id'=>3,'pid'=>1,'name'=>'二级21'), array('id'=&g

PHP如何通过传引用的思想实现无限分类(代码简单)_php实例

无限级分类,主要是通过储存上级分类的id以及分类路径来实现 在我的Simpla中,用到了无限分类,使用了PHP的传引用思想实现无限分类的方法,可以完美展示类似这样的分类模式. id   pid   name 1    0     四川 2    0     重庆 3    1     成都 4    1     绵阳 5    3     高新区 代码如下所示: /** * 数组变成无限级分类--传引用思想 * @param array $items * @return array */ pub

PHP无限分类(树形类)_php实例

复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array(        'id'=>2,        'pid'=>0,        'name'=>'新闻'    ),    array(        'id'=>3,        'pid'=>0,   

thinkPHP中钩子的两种配置调用方法详解_php实例

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

Android——Fragment介绍及两种基本使用方法

       今天在调ViewPager的时候,感觉ViewPager+Fragment这种做法更灵活,所以,现在拿出来Fragment再整理下. 一,为什么要用Fragment          1,灵活布局                          Fragment表现Activity中用UI的一个行为或者一部分.可以组合多个fragment放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity里重用某一个fragment.把fragment想象成一

thinkPHP中钩子的两种配置调用方法详解

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

AJAX 开发的两种不同的方法

ajax     最近几年Ajax应用程序开发出现了两种截然不同的方法,每一种方法都对以前的结构模型进行扩展.由于两种方法性质看起来是不同的,所以在实际应用程序的开发中应选择其中一种.     当我们第一次听到Ajax这个术语的时候,我们的第一反应可能就是其较高的Web页面交互性.至少在JavaScript中的Web应用程序部分必要的代码提供交互性,虽然在Ajax应用程序意义方面都有一致的意见,但对于开发者如何与JavaScript进行交互或者如何在客户端与服务器之间分配显示逻辑有一些分歧.  

ASP两种调试程序的方法

程序 大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞什么的

SQL服务器内存有两种基本管理方法:动态分配和静态分配

动态|服务器|静态 SQL服务器内存有两种基本管理方法:动态分配和静态分配 控制程序可使用的内存数量.动态分配允许管理员声明一块内存的大小:考虑到它的实际使用,SQL服务器可以分配给其需要占用的内存的最大值,并且(理论上)在没有使用内存的情况下将其释放.静态分配则是创建一块固定的内存空间,提供给SQL Server使用--不再进行分配. 在默认情况下,SQL Server被设置成动态分配,分配给其正在运行的计算机内所有可用的物理内存.许多管理员注意到SQL Server内存随时间的流逝被逐渐消耗