php 用递归实现的无限级别分类
<?php
header("Content-type:text/html; charset=utf-8");
/**
*
* @category contry_category 实现一个无限级别分类,类似种类的划分,经常使用在栏目导航
*
*/
/**
+-------------------------------------------------------------------------------+
| id name 类别id |
| 1 中国 0 |
| 2 北京 1 |
| 3 上海 1 |
| 4 美国 0 |
* 5 纽约 4 *
* 6 华盛顿 4 *
* 7 加州福尼亚 4 *
+-------------------------------------------------------------------------------+
*
* 类别id 为0的是顶级栏目
* 类别id 为id同样的是所属分类
*/
class contry_category{
public $i =-1;
public function index($array){
$this->i++;
if($array[$this->i]['category_id']==0){
echo "├".$array[$this->i]["name"]."<br />";
for($j=0;$j< count($array);$j++){
if($array[$j]['category_id']==$array[$this->i]['id']){ //查看所属分类
echo "├─┴".$array[$j]["name"]."<br />";
}
}
}
foreach($array as $v){
if($v['category_id']==0)
$ary[]=$v['category_id']; //获取几个顶级栏目。来确定递归几次
}
if($this->i<=count($ary))
$this->index($array); //递归
}
}
$infos = array(array("id"=>1,'name'=>"中国","category_id"=>0),array("id"=>2,'name'=>"北京","category_id"=>1),array("id"=>3,'name'=>"上海","category_id"=>1),array("id"=>4,'name'=>"美国","category_id"=>0),array("id"=>5,'name'=>"纽约","category_id"=>4),array("id"=>6,'name'=>"华盛顿","category_id"=>4),array("id"=>7,'name'=>"加州福尼亚","category_id"=>4));
$obj =new contry_category();
$obj->index($infos);
/**
* 打印出来的效果是这样
* ├中国
├─┴北京
├─┴上海
├美国
├─┴纽约
├─┴华盛顿
├─┴加州福尼亚
*/
php 用递归实现的无限级别分类的更多相关文章
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- 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无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- DotNet菜鸟入门之无限极分类(一)设计篇
写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到.而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处.所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下 ...
- php 实现无限极分类
原始数据 $array = array( array('id' => 1, 'pid' => 0, 'n' => '河北省'), array('id' => 2, 'pid' ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
随机推荐
- 无限层级且乱序的树形结构数据的整理,利用HashMap降低遍历次数
我们在展示一个机构树的时候,经常会遇到这种一个问题,查询数据的时候,是从下往上查的,但展示数据的时候,又要从下往上展示. 这时候就要把查询到的数据进行整理从而得到我们想要的结构. 举个样例. ID P ...
- Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)
想要给图片添加文字水印或者注释,我们需要实现在UIImage上写字的功能. 1,效果图如下: (在图片左上角和右下角都添加了文字.) 2,为方便使用,我们通过扩展UIImage类来实现添加水印功能 ( ...
- adb logcat 命令行用法
作者 :万境绝尘 转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 ...
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示(转)
我们平时用eclipse开发jsp页面时智能提示效果不太理想,今天用了两个小时发现了eclipse也可以像Visual Studio 2008那样完全智能提示HTML/JS/CSS代码,使用ecl ...
- 基于visual Studio2013解决C语言竞赛题之1068指针数组
题目 解决代码及点评 /* 68. 在主函数中输入10个不等长的字符串,用另一函数对它们排序. 然后在主函数中输出这10个已排好序的字符串,用指针数组完成. */ #inclu ...
- POJ2392 SpaceElevator [DP]
题目大意:有一头奶牛要上太空,他有非常多种石头,每种石头的高度是hi,可是不能放到ai之上的高度.而且这样的石头有ci个 将这些石头叠加起来.问可以达到的最高高度. 解题思路:首先对数据进行升序排序. ...
- accumulate
accumulate?就是sum up a range of elements.呵呵.这个挺简单的.以下是这个算法的简单介绍: Syntax: #include <numeric>//呵呵 ...
- 《Swift编程语言》中文翻译及读书笔记page25
The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里能够使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swi ...
- APK扩展文件介绍、功能及用法
APK扩展文件介绍 Android Market (Google Play Store)中每一个APK文件的最大限制是50MB.假设您的程序中包括大量的数据文件,曾经您仅仅能把这些数据文件放到自己的s ...
- MSSQL - 自增1的标识列一次增长了1000
@情若天_RunUp: 1. Open "SQL Server Configuration Manager"2. Click "SQL Server Services&q ...