一、需要变形的二维数组

 $arr = Array(
Array
(
'material_id' => 1,
'material_name' => '铜板纸',
'parent_id' => 0
),
Array
(
'material_id' => 26,
'material_name' => '哑粉纸',
'parent_id' => 0
),
Array
(
'material_id' => 61,
'material_name' => '胶版',
'parent_id' => 0
),
Array
(
'material_id' => 95,
'material_name' => '高级哑粉',
'parent_id' => 0
),
Array
(
'material_id' => 4,
'material_name' => '250g铜版纸',
'parent_id' => 1
),
Array
(
'material_id' => 5,
'material_name' => '200g铜版纸',
'parent_id' => 1
),
Array
(
'material_id' => 27,
'material_name' => '250g哑粉纸',
'parent_id' => 26
), Array
(
'material_id' => 28,
'material_name' => '200g哑粉纸',
'parent_id' => 26
),
Array
(
'material_id' => 29,
'material_name' => '200g哑粉纸的子项',
'parent_id' => 28
),
Array
(
'material_id' => 30,
'material_name' => '200g哑粉纸的子项的子项',
'parent_id' => 29
)
);

二、变形后的数组形式

 array (
0 =>
array (
'material_id' => 1,
'material_name' => '铜板纸',
'parent_id' => 0,
'children' =>
array (
0 =>
array (
'material_id' => 4,
'material_name' => '250g铜版纸',
'parent_id' => 1,
),
1 =>
array (
'material_id' => 5,
'material_name' => '200g铜版纸',
'parent_id' => 1,
),
),
),
1 =>
array (
'material_id' => 26,
'material_name' => '哑粉纸',
'parent_id' => 0,
'children' =>
array (
0 =>
array (
'material_id' => 27,
'material_name' => '250g哑粉纸',
'parent_id' => 26,
),
1 =>
array (
'material_id' => 28,
'material_name' => '200g哑粉纸',
'parent_id' => 26,
'children' =>
array (
0 =>
array (
'material_id' => 29,
'material_name' => '200g哑粉纸的子项',
'parent_id' => 28,
'children' =>
array (
0 =>
array (
'material_id' => 30,
'material_name' => '200g哑粉纸的子项的子项',
'parent_id' => 29,
),
),
),
),
),
),
),
2 =>
array (
'material_id' => 61,
'material_name' => '胶版',
'parent_id' => 0,
),
3 =>
array (
'material_id' => 95,
'material_name' => '高级哑粉',
'parent_id' => 0,
),
)

 三、实现代码

     public function ceshi($arr, &$arrParent = [])
{
// 首次获取parent_id = 0的相关父级项
foreach ($arr as $key => $val) {
if ($val['parent_id'] == 0) {
$arrParent[] = $val;
unset($arr[$key]);
}
} foreach ($arrParent as $parentKey => $parent) {
foreach ($arr as $key => $val) {
if ($val['parent_id'] == $parent['material_id']) {
$arrParent[$parentKey]['children'][] = $val;
unset($arr[$key]); // 匹配完成则删除
$this->ceshi($arr, $arrParent[$parentKey]['children']);
}
}
} return $arrParent;
}

PHP针对二维数组无限遍历变形研究的更多相关文章

  1. 元素均匀排列自动换行&二维数组前端遍历

    1.元素均匀排列并自动换行 display:flex; flex-wrap:wrap; 2.getFiled();取一行,取多行的话用getFiled(‘id’,true); 3.二维数组前端遍历: ...

  2. C++ 性能小测 1 二维数组的遍历效率

    C++ 性能小测 1 二维数组的遍历效率 遍历二维数组时,常规思路是使用一个嵌套循环.一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层.另一方面,由于二维数组是按行存储 ...

  3. 二维数组初始化 遍历 动态赋值 内存图 Day08

    package com.sxt.arraytest3; /* * 二维数组 */ public class TestArray { public static void main(String[] a ...

  4. Openjudge-NOI题库-二维数组回形遍历

    题目描述 Description 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组.如图所示:  输入输出格式 Input/ou ...

  5. vector 定义的二维数组的遍历

    之前我们分享了STL的一些容器,再介绍vector中只介绍了二维的vector的定义并没有说二维的vector怎么遍历,那么我们今天就来看下二维的vector怎么遍历 看下面的代码吧. #includ ...

  6. c#中对txt文件的读取与写入,针对二维数组

    class Program { ; ; static string[,] str = new string[ROW, COL]; static void Main(string[] args) { R ...

  7. 二维数组针对某字段排序 - array_multisort()

    /** * 针对二维数组下的某字段排序 * @param array $myarr 被排序数组 * @param string $sort_key 排序根据字段 * @param flag $sort ...

  8. 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动

    什么是二维数组? 数组当中放的还是数组 int [][] arr=new int[3][2]; 有3个小箱子,每个箱子2个格子. 看结果? int [][] arr=new int[3][2]; Sy ...

  9. 《java入门第一季》二维数组三个案例详解

    案例一:遍历二维数组 /* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数行数. 内循环控制的是一维数组的长度,每一行,一维数组元素分别的个数. */ class Array ...

随机推荐

  1. 13 vue学习 package.json

    一:package.json文件详解 管理你本地安装的npm包 .定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件,自动 ...

  2. JavaScript高级程序设计学习笔记第五章--引用类型

    一.object类型 1.创建object类型的两种方式: 第一种,使用构造函数 var person = new Object();或者是var person={};/与new Object()等价 ...

  3. JAVA之BigInteger(转)【转】【很好用啊】

    用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的来处理.下面是写的一些Java中 ...

  4. 5.zip隐写术

    首先分析pcapng,来得到flag. 先亮出下载地址:http://ctf5.shiyanbar.com/misc/LOL/LOL.pcapng 由于这是.pcapng,需要下载 wireshark ...

  5. UVaLive 4727 Jump (递推)

    题意:约瑟夫环,求最后三个数. 析:f[i] = (f[i-1] + k) % i 这是求最后一个数时候,我们倒着推到第一个数时,只有一个数,所以当只有两个数时,就是另一数, 同理,我们可以求得第三个 ...

  6. Git 分支管理 创建与合并分支

    分支在实际中有什么用呢? 假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了. 如果等代码全部写完再一次提交, ...

  7. 51nod1069【Nim取石子游戏】

    具体看:萌新笔记之Nim取石子游戏可以这么写: #include <bits/stdc++.h> using namespace std; typedef long long LL; in ...

  8. 2018最新苹果APP上架App Store流程(超详细)

    本文转发:https://blog.csdn.net/xxw888/article/details/73618837 2018最新整理iOS app上架app详细教程 上架iOS需要一个付费688的开 ...

  9. 基于SpringBoot构建分模块项目

    前言 步骤过于详细,多图慎入!!! 假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理.于是我们创建一个项目balabalabala写完交工. 一段时间后 ...

  10. Spark系列视频

    大数据生态圈很大,很多开发者都仅仅接触到某个单一产品. Spark 是近年来比较流行的大数据计算框架,系统.平台要想用好Spark 这个产品,需要用到很多的产品. 本视频系列主要是为准备入坑大数据的童 ...