<?php
header("Content-type:text/html;charset=utf-8");
$city=array(
array('id'=>1,'name'=>'北京',"pid"=>0),
array('id'=>2,'name'=>'广东',"pid"=>0),
array('id'=>3,'name'=>'海淀区',"pid"=>1),
array('id'=>4,'name'=>'昌平区',"pid"=>1),
array('id'=>5,'name'=>'上地',"pid"=>3),
array('id'=>6,'name'=>'西二旗',"pid"=>3),
array('id'=>7,'name'=>'回龙观',"pid"=>4),
array('id'=>8,'name'=>'霍营',"pid"=>4),
array('id'=>9,'name'=>'深圳',"pid"=>2),
array('id'=>10,'name'=>'广州',"pid"=>2),
array('id'=>11,'name'=>'福田',"pid"=>9),
array('id'=>12,'name'=>'南山',"pid"=>9),
);
/*
$res=array(
array('id'=1,'name'=>'北京',"pid"=>0),
array('id'=3,'name'=>'海淀区',"pid"=>1),
array('id'=5,'name'=>'上地',"pid"=>3),
array('id'=6,'name'=>'西二旗',"pid"=>3),
array('id'=4,'name'=>'昌平区',"pid"=>1),
array('id'=7,'name'=>'回龙观',"pid"=>4),
array('id'=8,'name'=>'霍营',"pid"=>4),
array('id'=2,'name'=>'广东',"pid"=>0),
array('id'=9,'name'=>'深圳',"pid"=>2),
array('id'=11,'name'=>'福田',"pid"=>9),
array('id'=12,'name'=>'南山',"pid"=>9),
array('id'=10,'name'=>'广州',"pid"=>2),
);
*/
function tree($arr,$pid=0){
static $res=array();
foreach($arr as $v){
if($v['pid']==$pid){
//说明找到,先保存,继续递归查找
$res[]=$v;
tree($arr,$v['id']);
}
}
return $res;
}
echo "<pre>";
var_dump($city);
echo "<hr>";
$result=tree($city);
var_dump($result);

*********************************************************************************************************

在模型类中的使用情形:

/**
* @param array $arr [要排序的数组]
* @param integer $pid [父id]
* @return array [排序好的数组]
*/
public function tree($arr,$pid=0,$level=0){
       static $res=array();
       foreach($arr as $v){
       if($v['pid']==$pid){
          //说明找到,先保存,然后在递归查找

$v['level']=$level;

         $res[]=$v;
         $this->tree($arr,$v['cat_id'],$level+1);
      }
   }
  return $res;
}

php递归方法的更多相关文章

  1. 使用递归方法遍历TreeView的节点如配置则勾选

    自己在网上找了一段时间都没有找到取自数据库的值与TreeView中的节点值进行对比如匹配则勾选中CheckBox的资料,后面自己写了一个递归方法实现,现在记录起来以备需要时使用.在没写这递归方法前如果 ...

  2. php用压栈的方式,循环遍历无限级别的数组(非递归方法)

    php用压栈的方式,循环遍历无限级别的数组(非递归方法) 好久不写非递归遍历无限级分类...瞎猫碰到死老鼠,发刚才写的1段代码,压栈的方式遍历php无限分类的数组... php压栈的方式遍历无限级别数 ...

  3. Java-->用递归方法复制目录、子目录以及文件(文件用到IO流)

    package com.dragon.java.newcopyfile; import java.io.File; import java.io.FileInputStream; import jav ...

  4. java递归方法

    一个方法体内调用他自身,称为方法递归. 方法递归是一种隐式的循环,Tahiti重复执行某段代码,但这种重复执行无需循环控制 /* Author:oliver QIN DATE:2015-12-19 D ...

  5. Yii中用递归方法实现无限级分类

    用递归方法实现多级分类,适合分级不太多的分类,如三到四级. 数据库结构: Model中(Category.php) /** * 获取全部分类信息 */ public function getAllca ...

  6. java 中递归的实现 以及利用递归方法实现汉诺塔

    今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...

  7. Java实现二叉树的前序、中序、后序遍历(递归方法)

      在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了.   二叉树的遍历方法分为三种,分别为前序遍历.中序遍历.后序遍历.下图即为一个二叉 ...

  8. Java递归方法遍历二叉树的代码

    将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...

  9. Python3练习题 021:递归方法求阶乘

    利用递归方法求5!. 方法一 f = 1 for i in range(1,6):     f = f * i print(f)   方法二 import functools print(functo ...

  10. 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)

    汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...

随机推荐

  1. JUnit Parametrized Tests

    Junit allows us to create parametrized tests. Parametrized test class has to be annotated with the @ ...

  2. Docker 入门指南——资源工具篇

    好工具 dive wagoodman/dive A tool for exploring each layer in a docker image 参考 用 Dive 看 Docker Image 裡 ...

  3. centos6配置网络常见问题

    1. 启用网卡 查看网卡模块: lsmod 移除网卡:modprobe -r e1000 装载网卡: modprobe e1000 2. 配置网络 vim /etc/sysconfig/network ...

  4. ubuntu upgrade

    升级命令 虽然 apt-get 经常被人诟病,但实际上它还是个挺好用的软件包管理器.在 Ubuntu 14.04 以后的系统中,apt-get 相关的升级更新命令有四个: apt-get update ...

  5. 永久修改VS include目录

    原文:https://blog.csdn.net/sysprogram/article/details/49214727 VS2008在选项里可以设置全局的Include目录和Lib目录, 但是VS2 ...

  6. 转入Python3.5

    Future 我决定从python2.7转到python3.5,毕竟python3才是未来,业余程序员也是有追求的 嵌入发布 版本3.5中的新特性.可以将python嵌入用户程序,变成程序的一部分,随 ...

  7. HDU 5245 Joyful(期望)

    http://acm.hdu.edu.cn/showproblem.php?pid=5245 题意: 给出一个n*m的矩阵格子,现在有k次操作,每次操作随机选择两个格子作为矩形的对角,然后将这范围内的 ...

  8. Oracle Single-Row Functions(单行函数)——NULL-Related Functions

    参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...

  9. 【二十二】mysqli事务处理与预处理总结

    事务处理 事务基本原理 如果不开启事务,执行一条sql,马上会持久化数据.可见:默认的mysql对sql语句的执行是自动提交的! 如果开启了事务,就是关闭了自动提交的功能,改成了commit执行自动提 ...

  10. centos nginx 中安装ssl证书 以及在项目中的使用

    今天阿里云的证书到期了,重新申请了一个,下面是从申请到安装以及结合项目使用的过程: 1.登录阿里云   2.在左侧找到SSL证书 3.申请免费的证书 4.下载证书 5.根据说明配置nginx 6.在项 ...