php递归无限极分类
递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种:
第一种:返回有排序的数组:
<?php $data = array(
1 => array(
'id' => 1,
'pid' => 0,
'user_name' => 'one',
),
2 => array(
'id' => 2,
'pid' => 1,
'user_name' => 'two',
),
3 => array(
'id' => 3,
'pid' => 1,
'user_name' => 'two',
),
4 => array(
'id' => 4,
'pid' => 2,
'user_name' => 'three',
),
5 => array(
'id' => 5,
'pid' => 2,
'user_name' => 'three',
),
6 => array(
'id' => 6,
'pid' => 5,
'user_name' => 'four',
),
); function genCate( $data, $pid = 0, $level = 0 ) {
static $result = array();
$result = ($level == 0) ? array() : $result;
$prefix = ($level == 0) ? '' : str_repeat( '-', $level );
foreach ( $data as $key => $row ) {
if ( $row['pid'] == $pid ) {
$row['user_name'] = $prefix . $row['user_name'];
$result[] = $row['user_name'];
genCate( $data, $row['id'], $level + 1 );
}
}
return $result;
} echo '<pre>';
$result = genCate( $data );
print_r( $result );
exit;
?>
另外一种:返回html字符串形式:
function getTreeHtml( $data, $pId ) {
$html = '';
foreach ( $data as $k => $v ) {
if ( $v['pid'] == $pId ) {
$html .= "<li>" . $v['user_name'];
$html .= getTree( $data, $v['id'] );
$html = $html . "</li>";
}
}
return $html ? '<ul>' . $html . '</ul>' : $html;
}
第三种:返回多维数组形式:
function getTreeArray( $data, $pId = 0 ) {
$tree = array();
foreach ( $data as $key => $value ) {
if ( $value['pid'] == $pId ) {
$value['childrens'] = getTreeArray( $data, $value['id'] );
$tree[] = $value;
}
}
return $tree;
}
php递归无限极分类的更多相关文章
- Think PHP递归重新排序无限极子分类数组(递归无限极分类)
Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...
- php递归无限极分类实例
无限级分类原理简介 无限分类看似"高大上",实际上原理是非常简单的 .无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性.要满足无限级分类,数据库需要有两个必须的字段,id ...
- php无限极分类递归与普通
1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...
- php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
随机推荐
- 对于requirejs AMD模块加载的理解
个人人为使用模块化加载的优点有三: 1,以我的项目为例:90%为图表展示,使用的是echarts,此文件较大,requirejs可以在同一个版本号(urlArgs)之下缓存文件,那么我就可以在访问登陆 ...
- Sencha touch Panel之间的跳转(如不使用TabPanel或者Carousel控件而产生跳转的动画效果)
常规的Sencha touch 应用都是"header content footer"结构,这样的结构无疑将使用TabPanel来实现,而且TabPanel肯定是card布局,这样 ...
- JS 动态显示 获取下拉框的多个值
<script type="text/javascript"> function GetProcessVal(i, t) { document.getElementsB ...
- 数论/the second wave
扩展欧几里得算法. void exgcd(int a,int b,int&x,int&y){ if(!b) { x=1;y=0;return ; } exgcd(b,a%b,x,y); ...
- APK中java代码反编译
Android APK中的Java代码可以被反编译到什么程度主要看APK的加密程度. 第一种情况:无混淆无加密无加壳.直接利用Dex2jar和JD-GUI可把源码从APK里抠出来,代码逻辑清晰,基本上 ...
- JDBC 与ODBC的区别
一.ODBC(Open DataBase Connectivity : 开放数据库连接) ODBC 总体结构 应用程序 执行处理并调用odbc函数,提交sql语 ...
- Peer to Peer File Sharing Through WCF
http://www.codeproject.com/Articles/614028/Peer-to-Peer-File-Sharing-Through-WCF https://github.com/ ...
- DDraw绘图
微软已经提供了GDI+绘图方式,但是GDI+绘图较慢,另外微软提供了效率更高的DirectDraw绘图方式.DirectDraw提供硬件加速功能. 首先需要确保电脑上的Ddraw硬件加速功能已经打开, ...
- SMG12232ZK标准字符点阵型液晶显示模块的演示程序[C51编程语言][MCS51并行接口方式]
//SMG12232ZK标准字符点阵型液晶显示模块的演示程序[C51编程语言][MCS51并行接口方式] //应用产品: SMG12232ZK标准中文字符点阵型液晶显示模块 // 本演示程序适用于SM ...
- n个筛子的点数
题目:把n个筛子扔到地上,所有筛子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率. 分析: 方法1:递归. 要求概率,那么我们首先只需要求出每个s出现的次数/(6^n).怎么求s的次 ...