不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点

代码:

<?php
$list = array(
array('id'=>1, 'pid'=>0, 'deep'=>0, 'name'=>'test1'),
array('id'=>2, 'pid'=>1, 'deep'=>1, 'name'=>'test2'),
array('id'=>3, 'pid'=>0, 'deep'=>0, 'name'=>'test3'),
array('id'=>4, 'pid'=>2, 'deep'=>2, 'name'=>'test4'),
array('id'=>5, 'pid'=>2, 'deep'=>2, 'name'=>'test5'),
array('id'=>6, 'pid'=>0, 'deep'=>0, 'name'=>'test6'),
array('id'=>7, 'pid'=>2, 'deep'=>2, 'name'=>'test7'),
array('id'=>8, 'pid'=>5, 'deep'=>3, 'name'=>'test8'),
array('id'=>9, 'pid'=>3, 'deep'=>2, 'name'=>'test9'),
);
function resolve($list) {
$newList = $manages = $deeps = $inDeeps = array();
foreach ($list as $row) {
$newList[$row['id']] = $row;
}
$list = null;
foreach ($newList as $row) {
if (! isset($manages[$row['pid']]) || ! isset($manages[$row['pid']]['children'][$row['id']])) {
if ($row['pid'] > 0 && ! isset($manages[$row['pid']]['children'])) $manages[$row['pid']] = $newList[$row['pid']];
$manages[$row['pid']]['children'][$row['id']] = $row;
}
if (! isset($inDeeps[$row['deep']]) || ! in_array($row['id'], $inDeeps[$row['deep']])) {
$inDeeps[$row['deep']][] = array($row['pid'], $row['id']);
}
}
krsort($inDeeps);
array_shift($inDeeps);
foreach ($inDeeps as $deep => $ids) {
foreach ($ids as $m) {
// 存在子栏目的进行转移
if (isset($manages[$m[1]])) {
$manages[$m[0]]['children'][$m[1]] = $manages[$m[1]];
$manages[$m[1]] = null;
unset($manages[$m[1]]);
}
}
}
return $manages[0]['children'];
}

递归实现

function resolve2(& $list, $pid = 0) {
$manages = array();
foreach ($list as $row) {
if ($row['pid'] == $pid) {
$manages[$row['id']] = $row;
$children = resolve2($list, $row['id']);
$children && $manages[$row['id']]['children'] = $children;
}
}
return $manages;
}

PHP不使用递归的无限级分类的更多相关文章

  1. thinkphp框架中使用递归实现无限级分类

    无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...

  2. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  3. PHP迭代与递归实现无限级分类

    无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 $arr = [ 1=>['id'=>1,'name'=>'父1','father'=& ...

  4. PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  5. php递归实现无限级分类树

      作者: PHP中文网|标签:PHP 递归 无限级树|2017-5-18 18:09   无限级树状图可以说是无限级栏目的一个显著特征,我们接下来就来看看两种不同的写法. 一.数据库设计 1 2 3 ...

  6. PHP 递归读取无限级分类

    /** * [获取第一级分类] * 20170829 * * @return array */ public function getCateList(){ $this->catelog = [ ...

  7. PHP递归重新排序无限级分类数组

    public static function Menus($id,$spac=0){ /* $data = array( 1 => array('id' => 1,'name' => ...

  8. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  9. PHP+MySQL无限级分类(非递归)

    要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...

随机推荐

  1. c#QQ连连看辅助

    近来无事,写个连连看辅助,下面先说下思路吧(口才不行,见谅哈) 游戏辅助有三种方法,一种是读内存,这个不知道怎么分析,还有一种是获取封包,这个分析起来复杂,最后一种是图片识别再分析,这里采用最后一种 ...

  2. js框架漫谈

    现在实际项目中可供选择的javascript框架很多,热门的有jquery,dojo,mootools,ext等.这些框架按照不同的标准有不同的分类方法,比如按照扩展方式便可分为prototype式的 ...

  3. Python学习之---冒泡,选择,插入排序

    Python学习之---冒泡,选择,插入排序 最近学习了python基础,写一下3大排序练练手: 1 ''' 2 Created on 2013-8-23 3 4 @author: codegeek ...

  4. linux学习心得之vim/Cvim篇

    linux学习心得之vim/Cvim篇 在linux 下,vim 时一种最常见的编辑器,很多linux的发行版就自带了.我的是CentOS 6.3. 基本上Vim共分为3种模式,分别是一般模式,编辑模 ...

  5. wp加载本地HTML(附带图片,CSS,JS)

    wp加载本地HTML(附带图片,CSS,JS) Windows Phone:Load Local HTML with Img,Css,Js by 唐小崇 http://www.cnblogs.com/ ...

  6. Linux Wine with *.bat *.exe ( Photoshop and etc.. )

    Firtly all you need is to install wine on your computer. Mine is ubuntu 12.04 which is running KDE o ...

  7. linux c编程获得当前进程的进程名和执行路径

    如何得到当前进程的进程名和执行路径.写了个程序分享一下. [sam@hzhsan test]$ more test_processname.cpp #include <limits.h> ...

  8. 基于Log4net插件

    基本代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using log ...

  9. java调用存储过程超时及DBCP参数配置说明

    问题:            生产环境实时打标超时: 分析原因:        “实时打标java服务中,只创建数据库Connection,没有关闭数据库Connection,导致数据库连接池耗尽,无 ...

  10. php设计模式之抽象工厂模式

    之前总结了一下工厂模式,其实准确地说是简单 工厂模式,在它的基础上再进行抽象就可以得到一种新的模式:抽象工厂模式. 专业一点的定义为: 抽象工厂模式(Abstact Factory)是一种常见的软件设 ...