php递归方法
<?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递归方法的更多相关文章
- 使用递归方法遍历TreeView的节点如配置则勾选
自己在网上找了一段时间都没有找到取自数据库的值与TreeView中的节点值进行对比如匹配则勾选中CheckBox的资料,后面自己写了一个递归方法实现,现在记录起来以备需要时使用.在没写这递归方法前如果 ...
- php用压栈的方式,循环遍历无限级别的数组(非递归方法)
php用压栈的方式,循环遍历无限级别的数组(非递归方法) 好久不写非递归遍历无限级分类...瞎猫碰到死老鼠,发刚才写的1段代码,压栈的方式遍历php无限分类的数组... php压栈的方式遍历无限级别数 ...
- Java-->用递归方法复制目录、子目录以及文件(文件用到IO流)
package com.dragon.java.newcopyfile; import java.io.File; import java.io.FileInputStream; import jav ...
- java递归方法
一个方法体内调用他自身,称为方法递归. 方法递归是一种隐式的循环,Tahiti重复执行某段代码,但这种重复执行无需循环控制 /* Author:oliver QIN DATE:2015-12-19 D ...
- Yii中用递归方法实现无限级分类
用递归方法实现多级分类,适合分级不太多的分类,如三到四级. 数据库结构: Model中(Category.php) /** * 获取全部分类信息 */ public function getAllca ...
- java 中递归的实现 以及利用递归方法实现汉诺塔
今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...
- Java实现二叉树的前序、中序、后序遍历(递归方法)
在数据结构中,二叉树是树中我们见得最多的,二叉查找树可以加速我们查找的效率,那么输出一个二叉树也变得尤为重要了. 二叉树的遍历方法分为三种,分别为前序遍历.中序遍历.后序遍历.下图即为一个二叉 ...
- Java递归方法遍历二叉树的代码
将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...
- Python3练习题 021:递归方法求阶乘
利用递归方法求5!. 方法一 f = 1 for i in range(1,6): f = f * i print(f) 方法二 import functools print(functo ...
- 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...
随机推荐
- ldap集成zabbix
zabbix版本:3.0.7 ldap认证配置: zabbix管理员登录-->管理-->认证,选择ldap方式 参照以上格式填写,需注意配置完成后需在zabbix上创建与ldap同名账户才 ...
- 20145319 《网络渗透》免考—API拦截技术
20145319 <网络渗透>免考-API拦截技术 概述 本次实验在window环境下进行,主要通过编写hook代码和注入程序,将我们的hook代码通过dll文件的形式注入到目标中,拦截其 ...
- JAVA基础部分 JDK和JRE以及JVM
第一部分: 一.dos命令 *快捷查看电脑ip: Win + R进入cmd;输入ipconfig/all查看IPv4:192.168.0.xxx(首选); 基本命令: cd进入目录:d: 直接进入盘符 ...
- adb驱动安装和使用报错笔记
adb驱动安装 adb驱动下载地址:https://adb.clockworkmod.com/ 安装时候选择一个容易记住的路径,这个很重要,因为adb驱动没有自动配置环境变量,所以实验时候将adb安装 ...
- ListView与SimpleAdapter(三)
一般用于只有两个控件的列表. 使用SimpleAdapter 的数据是以List<Map<String,?>>形式封装数据, List的每一节对应ListView的每一行. H ...
- 从Git上导入Maven 项目到Eclipse
Note: 经验之谈,操作过程中有不懂的地方可以留言问. Step: Open the Eclipse: --1.File>>Import>>Git:Project from ...
- topcoder srm 683 div1
problem1 link 肯定存在相邻两堆满足不会存在任何操作在这两堆之间进行.然后就成为一条链,那么只需要维护链的前缀和即可判断当前堆和前一堆之间需要多少次操作. problem2 link 对于 ...
- C语言 字符串大小写转换 自定义函数
#include <stdio.h>#include <stdlib.h>#include <string.h> char * strtolower(char * ...
- 今天就整一个bug了
BeanPostProcessor加载次序及其对Bean造成的影响分析 SSM整合出现not found for dependency: expected at least 1 bean which ...
- .Net Core Package lose or not match
错误.警告的说明: 示例一: 严重性:警告 代码:MSB3106 说明 :程序集强名称“C:\Users\$(computerName)\.nuget\packages\$(packageName)\ ...