<?php
/**
*创建父节点树形数组
* 参数 $ar 数组,邻接列表方式组织的数据 $id 数组中作为主键的下标或关联键名 $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_parent($ar, $id = 'id', $pid = 'pid') {
foreach ( $ar as $v )
$t [$v [$id]] = $v;
foreach ( $t as $k => $item ) {
if ($item [$pid]) {
if (! isset ( $t [$item [$pid]] ['parent'] [$item [$pid]] ))
$t [$item [$id]] ['parent'] [$item [$pid]] = & $t [$item [$pid]];
}
}
return $t;
}
/**
* * 创建子节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid
* 数组中作为父键的下标或关联键名 * 返回 多维数组 *
*/
function find_child($ar, $id = 'id', $pid = 'pid') {
foreach ( $ar as $v )
$t [$v [$id]] = $v;
foreach ( $t as $k => $item ) {
if ($item [$pid]) {
$t [$item [$pid]] ['child'] [$item [$id]] = & $t [$k];
}
}
return $t;
}

$data = array (
array (
'ID' => 1,
'PARENT' => 0,
'NAME' => '祖父'
),
array (
'ID' => 2,
'PARENT' => 1,
'NAME' => '父亲'
),
array (
'ID' => 3,
'PARENT' => 1,
'NAME' => '叔伯'
),
array (
'ID' => 4,
'PARENT' => 2,
'NAME' => '自己'
),
array (
'ID' => 5,
'PARENT' => 4,
'NAME' => '儿子'
)
);
$p = find_parent ( $data, 'ID', 'PARENT' );
$c = find_child ( $data, 'ID', 'PARENT' );
print_r($c);exit;

PHP 发布两个不用递归的树形数组构造函数(转)的更多相关文章

  1. PHP递归生成树形数组

    数据表结构 id   name  pid       ){ foreach($data as $row){ if($row['pid']==$p_id){ $tmp = $this->tree( ...

  2. (实用篇)PHP不用递归遍历目录下所有文件的代码

    <?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ fu ...

  3. php不用递归完成无限分类,从表设计入手完整演示过程

    无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, ...

  4. 在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)

    原文:在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...

  5. LeetCode 77,组合挑战,你能想出不用递归的解法吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第46篇文章,我们一起来LeetCode中的77题,Combinations(组合). 这个题目可以说是很精辟了,仅仅 ...

  6. LeetCode 94 | 基础题,如何不用递归中序遍历二叉树?

    今天是LeetCode专题第60篇文章,我们一起来看的是LeetCode的94题,二叉树的中序遍历. 这道题的官方难度是Medium,点赞3304,反对只有140,通过率有63.2%,在Medium的 ...

  7. WPF下递归生成树形数据绑定到TreeView上

    最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: <TreeView x:Name="> <TreeView.ItemTe ...

  8. vue2 递归组件--树形

    递归组件,官方给的教程太简便了,根本看不出到底怎么用.于是自己查网摸索了一下,这儿只把核心思想写出来. 效果如下图,点击后打开二级菜单,再点击后打开三级. //js //引子//思想:当v-if='f ...

  9. AJPFX:不用递归巧妙求出1000的阶乘所有零和尾部零的个数

    package com.jonkey.test; import java.math.BigInteger; public class Test6 { /*** @param args*  需求:求出1 ...

随机推荐

  1. 算法系列之图--BFS

    广度优先搜索以源结点s为出发点,算法始终将已发现和未发现结点之间的边界,沿其广度方向向外扩展.也即算法需要在发现所有距离源结点s为k的所有结点之后才会去发现距离源结点距离为k+1的其他结点. talk ...

  2. Html 中select标签的边框与右侧倒三角的去除

    首先是边框的去除:可以设置属性border:none;或border:0px; 不过这还是有一个bug,不同浏览器会在选中select标签时,加上一个边框: 之后是右侧倒三角的去除:设置属性 appe ...

  3. JQUERY1.9学习笔记 之可见性过滤器(二) 可见选择器

    描述:选择所有可见的元素. 例:点击时让所有的可见的div元素变黄. <!doctype html><html lang="en"> <head> ...

  4. php基础知识【函数】(5)正则preg

    一.匹配次数 (1) * 匹配前面的子表达式零次或多次 (2) + 匹配前面的子表达式一次或多次,+ 等价于 {1,} (3) ? 匹配前面的子表达式零次或一次,? 等价于 {0,1} (4){n} ...

  5. MySQL中删除重复数据只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...

  6. Python自动化运维之24、JQuery

    jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多).它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, ...

  7. unix 环境高级编程-读书笔记与习题解答-第二篇

    第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...

  8. App适配iPhone 6/ Plus和iOS 8:10条小秘诀

    App适配iPhone 6/ Plus和iOS 8:10条小秘诀   iPhone 6iOS 8适配   (原文:raywenderlich 作者:Jack Wu 译者:@TurtleFromMars ...

  9. Redmine配置

    官网步骤说明 http://www.redmine.org/projects/redmine/wiki/RedmineInstall 搭环境 1.MySql 2.RailsInstaller:Redm ...

  10. C++关于构造函数的深拷贝与浅拷贝

    首先拷贝构造函数的声明方法: 类名::类名(const 类名&) 1.浅拷贝的实现程序: #include "stdafx.h" #include <iostream ...