将树形结构的数组按照顺序遍历为二维数组

/**
 * 将树形结构的数组按照顺序遍历为二维数组
 * renxing,2015年8月7日 11:06:47
 */
function arr_child ($array) {
 static $res;
 if (!is_array($array)) {
  return false;
 }
 foreach ($array as $k=>$v) {
  if (is_array($v) && isset($v[‘child‘])) {
   $child = $v[‘child‘]; //将这个数组的子节点赋给变量 $child
   unset($v[‘child‘]); //释放这个数组的所有子节点
   $res[] = $v; //将释放后的数组填充到新数组 $res
   arr_child ($child); //递归处理释放前的包含子节点的数组
  } else {
   $res[] = $v;
  }
 }
 return $res;
}

【原数组结构】

【转换后的数组】



《附加:上面的树形结构数组怎么来的?》

/**
 * cateList
 * renxing,2015年8月6日 15:55:59
 * 十分牛逼的算法By:http://www.oschina.net/code/snippet_173183_11767
 */
    public function cateListLg($list){
     //先对数组基本的转换
     $items = array();
     foreach ($list as $k=>$v){
     $items[$v[‘cate_id‘]] = $v;
     }
     //qq($items);

     //将所有分类设置为无限级分类的形式
     $tree = array(); //格式化好的树
     foreach ($items as $item){
     if (isset($items[$item[‘parent_id‘]])){
     $items[$item[‘parent_id‘]][‘child‘][] = &$items[$item[‘cate_id‘]];
     }else{
     $tree[] = &$items[$item[‘cate_id‘]];
     }
     }

     //qq($tree);
     return $tree;
    }

【代码截图】

【初始数据】

【select的结构】

【转换树形后的结构】----即:本文最上面的结构

时间: 2024-10-19 07:07:18

将树形结构的数组按照顺序遍历为二维数组的相关文章

稀疏数组的经典应用(二维数组与稀疏数组的相互转换)

package com.zhangwl.数据结构.稀疏数组; /** * @ClassName SparseArray * @Description 棋盘游戏演示 * @Author zhangwl * @Date 2019/10/10 22:54 * @Version 1.0 **/public class SparseArray { public static void main(String[] args) { /*创建一个原始的二维数组11 * 11 ,0:表示没有棋子 :1:表示黑子:

Unit06: 数组的常用方法_2 、 二维数组 、 String_1

1.数组API 数组=数据+操作数据的API 1. 数组 to String:2种: var str=arr.toString(); -->输出数组中的内容,每个元素用逗号分隔 -->自动调用 var str=arr.join("连接符") ******* -->输出数组中的内容,自定义元素间连接符 批量操作页面元素时,可以用join拼接成innerHTML,一次性修改 何时使用:2种固定套路 1. 将字符组成单词:arr.join("") 2.

数组问题 1.行列有序二维数组中查找2.在一组数成对出现的数中有两个数只出现一次3.在移位数组中查找一个数

一.在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按从上到下的递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 首先选取数组中右上角的数字.如果该数字等于要查找的的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行.也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围剔除一行或一列,这样每一步都可以缩小查找的范围. 实现过程如下: 运行结果如下:

第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)

一维数组:1:/* 数组: 1. 数组是一种引用类型 2. 数组是一种简单的数据结构,线性的机构 3. 数组是一个容器,可以用来存储其他元素, 4. 数组也是可以存储任意数据类型的元素 5. 数组分为: 一维数组,二维数组,三维数组,多维数组 6. 数组中的存储的元素类型 是统一的 7. 数组的长度是不可变的,数组一旦创建长度就是不可变的,固定的 声明数组语法: <1>. 数组元素的类型[] 变量名称 <2>. 数组元素的类型 变量名称[] */ public class Arra

十、数组(2):二维数组

1.什么是二维数组? int a[3][5]; 通常理解为a是一个3行5列的矩阵. 2.二维数组的遍历 for( i=0;i<3;i++ ){ for( j=0; j<5;j++){ a[i][j]=i*j; } } --a[i][j]是一个int --表示第i行第j列上的单元. 3.二维数组的初始化 int a[ ][5] = { {0,1,2,3,4}, {2,3,4,5,6}, }; --列数是必须给出的,行数可以由编译器来数 --每行一个{},逗号分隔 --最后的逗号可以存在,有古老的

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

一维数组、二维数组用数学公式初始化以及二维数组的行坐标可省

<span style="font-size:14px;">#include<stdio.h> #include<stdlib.h> //二维数组赋值 void show2() { int a[3][4]; int k=0; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { a[i][j]=i*4+(j+1);//数学公式 赋值 // a[i][j]= ++k;//与上面效果一致 printf(&

php显示判断数组是不是带下标的二维数组

1,代码: <?php header("Content-type:text/html;charset=utf-8"); function va($value){     echo "<pre>";     var_dump($value);     echo "</pre>"; } function edump($value){     va($value);     exit(); } function jdump

Java连载68-数组的拷贝、二维数组

一.数组的拷贝 函数arraycopy(),参数为:源数组.源数组的开始下标.目标数组.目标数组的开始下标.拷贝长度 package com.bjpowernode.java_learning; ? public class D68_1_CopyOfArrays { public static void main(String[] args) { int[] a1 = {2,3,4,5,6,7,8}; int[] a2 = {10,11,12,13,14,15,16}; System.array