<?php
/**
* Mr.xml
* 处理无限级分类
*/
class Category{
/**
* [递归一维数组]
* @param [type] $cate [传递一个数组$cate]
* @param string $html [标示符]
* @param [type] $pid [所属哪个类]
* @param [type] $level [等级]
* @return [type] [把数组返回出去]
*/
static public function unlimitedForLevel($cate, $html = '--', $pid = 0, $level = 0, $str = '♩——'){
$arr = array();
foreach ($cate as $v) {
if($v['pid'] == $pid){
$v['level'] = $level+1;
$v['html'] = str_repeat($html, $level);
if( $level != 0){
$v['str'] = $str;
}
$arr[] = $v;
$arr = array_merge($arr, self::unlimitedForLevel($cate, $html, $v['id'], $level+1));
}
}
return $arr;
} /*递归多维数组*/
static public function unlimitedForLayer($cate, $name = 'child', $pid = 0)
{
$arr = array();
foreach($cate as $v)
{
if($v['pid'] == $pid)
{
$v[$name] = self::unlimitedForLayer($cate, $name, $v['id']);
$arr[] = $v;
}
}
return $arr;
} /*传递一个子分类ID返回所有父级分类*/
static public function getParents($cate, $id)
{
$arr = array();
foreach($cate as $v)
{
if($v['id'] == $id)
{
$arr[] =$v;
$arr = array_merge(self::getParents($cate, $v['pid']), $arr);//组合数组
}
}
return $arr;
}
/*传递一个父级分类ID求出所有子分类*/
static public function getChilds($cate, $pid = 0)
{
$arr = array();
foreach($cate as $v)
{
if($v['pid'] == $pid)
{
$arr[] = $v['id'];//返回ID如要返回所有只需$V
$arr = array_merge($arr, self::getChilds($cate, $v['id']));
}
}
return $arr;
}
}
?>

  

PHP递归的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  2. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  3. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

  4. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  5. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  6. C语言用分别用递归和循环求数字的阶乘的方法

    以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...

  7. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  8. Java之递归求和的两张方法

    方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...

  9. C#语言基础——递归

    递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...

  10. SQL Server封闭掉 触发器递归

    SQL Server关闭掉 触发器递归SQL Server  是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...

随机推荐

  1. 【转】bt协议的详细分析

    转自:https://baoz.net/bt-protocol/ 一 BT系统的组成结构 1 普通的Web服务器:        例如Apache或IIS服务器 2 一个静态的种子文件:     即. ...

  2. 从零开始学android开发-四大组件之一 Activity

    1.Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满屏的, ...

  3. 让DataGridView显示行号

          http://www.cnblogs.com/JuneZhang/archive/2011/11/21/2257630.html 为了表示行号,我们可以在DataGridView的RowP ...

  4. MySQL HA

    读写分离 在应用端处理 Spring AbstractRoutingDataSource 淘宝MyFox MySQL Replication Connection 在数据库端处理 MySQL Prox ...

  5. (原)C++解析XML生成类对象_v1.0 函数指针

    要写一个xml解析,解析后获得到的数据变成各个类的对象. 解析有现成的库,使用tinyxml,但是解析出来的类库如何变成各个类的对象, 例如一下这个xml, <musics> <mu ...

  6. 应聘.net开发工程师常见的面试题(四)

    1.在Asp.net中所有的自定义用户控件都必须继承自________? 答:Control. 2.在.Net中所有可序列化的类都被标记为_____? 答:[serializable] 3.在.Net ...

  7. 关于C++需要加强学习的几点内容

    1.C++ effective指导原则 2.C++标准库 3.数据结构算法 4.C++设计模式 5.shell脚本 6.python

  8. 用EnumDisplaySettings获取显示设置信息

    LPDEVMODE pMode = new DEVMODE;//开空间 DWORD dwBitsPerPel=0;//每象素所使用的显存位数(Bits) DWORD dwPelsWidth=0;//水 ...

  9. system.badimageformatexception 未能加载文件或程序集

    今天在调用dll文件的时候发现这样一个错误.      system.badimageformatexception 未能加载文件或程序集.   发现项目CPU默认Any CPU,我的系统是X64,将 ...

  10. HashMap的一般用法以及遍历方法

    private Map<Integer,String> selected = new HashMap<Integer,String>(); selected.put(key,v ...