php非递归无限级分类.

时间:2022-12-30 22:35:46

项目需要.递归无限级分类效率实在太低.理了半天思路写的.

分类越多效率越高.

/**
* 单次循环返回无限极分类嵌套
* @param array $data 操作的数组
* @param string $columnPri 唯一键名,如果是表则是表的主键
* @param string $columnPid 父ID键名
* @return array
*/
function region_tree($data, $columnPri, $columnPid)
{
define('__parent_id', $columnPid);
define('__pri_id', $columnPri);
if (empty($data)) {
return array();
}
usort($data, function ($prev, $next) {
return CStrCmp($prev[__parent_id],$next[__parent_id]);
}); foreach ($data as $value) {
$parent_id = $value[__parent_id];
$pri_id = $value[__pri_id];
if (isset(${$pri_id})) {
$value['_data'] = isset($value['_data']) ? array_merge($value['_data'], ${$pri_id}) : ${$pri_id};
unset(${$pri_id});
}
${$parent_id}[] = $value;
}
unset($data, $key, $value, $columnPid, $columnPri, $pri_id);
$dataArray = ${$parent_id}[0];
return $dataArray;
} /**
* 无限递归关联函数
* 兼容5.3-写的
* @param $a
* @param $b
* @return int
*/
function CStrCmp($a, $b)
{
if ($a == $b) return 0;
return $a > $b ? -1 : 1;
}

下面是递归无限极分类函数

/**
* 递归返回无限极分类嵌套
* @param $data 操作的数组
* @param int $pid 一级PID的值
* @param string $fieldPri 唯一键名,如果是表则是表的主键
* @param string $fieldPid 父ID键名
* @return array
*/
function channelLevel($data, $pid = 0, $fieldPri = 'cid', $fieldPid = 'pid')
{
if (empty($data)) {
return array();
}
$arr = array();
foreach ($data as $v) {
if ($v[$fieldPid] == $pid) {
$arr[$v[$fieldPri]] = $v;
$arr[$v[$fieldPri]]["region"] = channelLevel($data, $v[$fieldPri], $fieldPri, $fieldPid);
}
}
return $arr;
}

php非递归无限级分类.的更多相关文章

  1. 042-PHP使用闭包函数递归无限级分类

    <?php //使用闭包函数递归无限级分类 function demo($array){ # 用于存储递归后的队列 $data = []; # 递归函数 $func = function (&a ...

  2. php 非递归实现分类树

    本文实例讲述了php通过前序遍历树实现无需递归的无限极分类.分享给大家供大家参考.具体如下: 大家通常都是使用递归实现无限极分类都知道递归效率很低,下面介绍一种改进的前序遍历树算法,不适用递归实现无限 ...

  3. ZT 二叉树先序,中序,后序遍历非递归实现

    二叉树先序,中序,后序遍历非递归实现 分类: 数据结构及算法2012-04-28 14:30 8572人阅读 评论(6) 收藏 举报 structc 利用栈实现二叉树的先序,中序,后序遍历的非递归操作 ...

  4. 转&colon;php&plus;mysql菜单无限级分类&lpar;非递归&rpar;

    php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244

  5. php实现无限级分类查询(递归、非递归)

    递归函数实现方式 上面提到,递归函数的也是借助于栈的机制实现的,但是底层对于栈的处理对于程序员来说都是透明的,程序员只需要关心应用的实现逻辑.所以说使用递归处理上述问题理解起来比较容易,代码也比较简洁 ...

  6. PHP&plus;MySQL无限级分类&lpar;非递归&rpar;

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

  7. PHP无限级分类实现(递归&plus;非递归)

    <?php /** * Created by PhpStorm. * User: qishou * Date: 15-8-2 * Time: 上午12:00 */ //准备数组,代替从数据库中检 ...

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

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

  9. &lpar;实用篇&rpar;PHP递归实现无限级分类

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

随机推荐

  1. Python&lowbar;猜大小

    # 需要在python3上执行 import random def game (capital = 1000): point1 = random.randrange(1,7) point2 = ran ...

  2. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  3. 【原创】Android selector选择器无效或无法正常显示的一点研究

    想将LinearLayout作为一个按钮,加上一个动态背景,按下的时候,背景变色,这个理所当然应该使用selector背景选择器来做: <LinearLayout android:id=&quo ...

  4. 时光煮雨 Unity3d 序列目标点的移动①

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  5. 33&period;Android之Fragment学习

    Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的 ...

  6. jQuery&lowbar;serialize的用法

    jQuery_serialize(form表单序列化)用于在前端要传很多值往后端的时候: <!DOCTYPE html> <html lang="en"> ...

  7. ubuntu only enable left click

    xmodmap -e "pointer = 1 0 0 0 0 0 0 0 0 0"

  8. python日常小计

    1.查看变量类型:  pring type(item) 2.解决list中的中文显示乱码 使用decode('string_escap')将数据库查询返回的将带转义的字节码字符串转换为成utf-8中文

  9. NetCore控制台实现自定义CommandLine功能

    命令行科普: 例如输入: trans 123 456 789 -r 123 -r 789上面例子中:trans是Command,123 456 789是CommandArgument,-r之后的都是C ...

  10. python 使用跨平台文件锁

    #encoding=utf-8 print '中国' #使用跨平台文件锁 import os if os.name == 'nt': import win32con,win32file,pywinty ...