PHP针对二维数组无限遍历变形研究
一、需要变形的二维数组
$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.元素均匀排列并自动换行 display:flex; flex-wrap:wrap; 2.getFiled();取一行,取多行的话用getFiled(‘id’,true); 3.二维数组前端遍历: ...
- C++ 性能小测 1 二维数组的遍历效率
C++ 性能小测 1 二维数组的遍历效率 遍历二维数组时,常规思路是使用一个嵌套循环.一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层.另一方面,由于二维数组是按行存储 ...
- 二维数组初始化 遍历 动态赋值 内存图 Day08
package com.sxt.arraytest3; /* * 二维数组 */ public class TestArray { public static void main(String[] a ...
- Openjudge-NOI题库-二维数组回形遍历
题目描述 Description 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组.如图所示: 输入输出格式 Input/ou ...
- vector 定义的二维数组的遍历
之前我们分享了STL的一些容器,再介绍vector中只介绍了二维的vector的定义并没有说二维的vector怎么遍历,那么我们今天就来看下二维的vector怎么遍历 看下面的代码吧. #includ ...
- c#中对txt文件的读取与写入,针对二维数组
class Program { ; ; static string[,] str = new string[ROW, COL]; static void Main(string[] args) { R ...
- 二维数组针对某字段排序 - array_multisort()
/** * 针对二维数组下的某字段排序 * @param array $myarr 被排序数组 * @param string $sort_key 排序根据字段 * @param flag $sort ...
- 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动
什么是二维数组? 数组当中放的还是数组 int [][] arr=new int[3][2]; 有3个小箱子,每个箱子2个格子. 看结果? int [][] arr=new int[3][2]; Sy ...
- 《java入门第一季》二维数组三个案例详解
案例一:遍历二维数组 /* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数行数. 内循环控制的是一维数组的长度,每一行,一维数组元素分别的个数. */ class Array ...
随机推荐
- ACM之Java技巧
一.Java之ACM注意点 关于四舍五入 小数保留几位: DecimalFormat df = new DecimalFormat("0.00"); String num = d ...
- CF-845C
C. Two TVs time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- Flutter汇总贴
Fluuter常遇到的问题 Flutter从入门到进阶实战携程网App_汇总贴 Flutter教程网 http://www.flutterj.com/ 第三季:https://jspang.com/p ...
- logging 模块使用
1. logging 1.1 什么是 logging logging 模块是 Python 内置的日志管理模块,不需要额外安装. 使用: import logging logging.critical ...
- 根据xml文件自动生成xsd文件
根据xml生成xsd文档 1. 找到vs自带的xsd.exe工具所在的文件夹位置: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意 ...
- MVC+Linq+EF笔记
using (DataContext ctx = new DataContext()) { /*foreach (var item in ctx.employees) { ViewData[" ...
- ubuntu18.04安装opencv 3.4.1
github 地址: https://github.com/opencv/opencv 安装依赖 sudo apt-get install build-essential sudo apt--dev ...
- Mac终端操作移动硬盘文件命令
桌面上看到的硬盘都挂载在 /Volumes目录下 例如移动硬盘名为ZTB,有System目录,则应输入命令: cd /Volumes/ZTB/System 注意:进入Volumes目录命令为cd /V ...
- mac搭建TensorFlow环境
1.首先安装Anaconda,下载地址:https://www.anaconda.com/download/#macos,根据需要下载所需的版本. 2.安装TensorFlow,安装命令:pip in ...
- git push error: ! [rejected] failed to push some refs to . . .
报错情况: 报错原因:远程库与本地库不一致造成的,需要把远程库同步到本地库! 解决办法: git pull --rebase origin master 这条指令是将远程库中的更新合并到本地库,--r ...