代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
将一个二维数组转换成有父子关系的数组
作者:
dezai
/ 发布于
2014/7/16
/
591
<?php /** * Tree 树型类(无限分类) * * @author Kvoid * @copyright http://kvoid.com * @version 1.0 * @access public * @example * $tree= new Tree($result); * $arr=$tree->leaf(0); * $nav=$tree->navi(15); */ class Tree { private $result; private $tmp; private $arr; private $already = array(); /** * 构造函数 * * @param array $result 树型数据表结果集 * @param array $fields 树型数据表字段,array(分类id,父id) * @param integer $root 顶级分类的父id */ public function __construct($result, $fields = array('id', 'pid'), $root = 0) { $this->result = $result; $this->fields = $fields; $this->root = $root; $this->handler(); } /** * 树型数据表结果集处理 */ private function handler() { foreach ($this->result as $node) { $tmp[$node[$this->fields[1]]][] = $node; } krsort($tmp); for ($i = count($tmp); $i > 0; $i--) { foreach ($tmp as $k => $v) { if (!in_array($k, $this->already)) { if (!$this->tmp) { $this->tmp = array($k, $v); $this->already[] = $k; continue; } else { foreach ($v as $key => $value) { if ($value[$this->fields[0]] == $this->tmp[0]) { $tmp[$k][$key]['child'] = $this->tmp[1]; $this->tmp = array($k, $tmp[$k]); } } } } } $this->tmp = null; } $this->tmp = $tmp; } /** * 反向递归 */ private function recur_n($arr, $id) { foreach ($arr as $v) { if ($v[$this->fields[0]] == $id) { $this->arr[] = $v; if ($v[$this->fields[1]] != $this->root) $this->recur_n($arr, $v[$this->fields[1]]); } } } /** * 正向递归 */ private function recur_p($arr) { foreach ($arr as $v) { $this->arr[] = $v[$this->fields[0]]; if ($v['child']) $this->recur_p($v['child']); } } /** * 菜单 多维数组 * * @param integer $id 分类id * @return array 返回分支,默认返回整个树 */ public function leaf($id = null) { $id = ($id == null) ? $this->root : $id; return $this->tmp[$id]; } /** * 导航 一维数组 * * @param integer $id 分类id * @return array 返回单线分类直到顶级分类 */ public function navi($id) { $this->arr = null; $this->recur_n($this->result, $id); krsort($this->arr); return $this->arr; } /** * 散落 一维数组 * * @param integer $id 分类id * @return array 返回leaf下所有分类id */ public function leafid($id) { $this->arr = null; $this->arr[] = $id; $this->recur_p($this->leaf($id)); return $this->arr; } } ?>
试试其它关键字
二维数组
父子关系
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
dezai
贡献的其它代码
(
1065
)
.
双色球
.
列出所有物理网络适配器
.
快乐数的 Python 实现
.
计算当月还剩天数
.
猜属相
.
二十四小时时钟
.
每日一语
.
很酷的日历
.
超长日历表单
.
最简单的时钟
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3