一、需要变形的二维数组

  1. $arr = Array(
  2. Array
  3. (
  4. 'material_id' => 1,
  5. 'material_name' => '铜板纸',
  6. 'parent_id' => 0
  7. ),
  8. Array
  9. (
  10. 'material_id' => 26,
  11. 'material_name' => '哑粉纸',
  12. 'parent_id' => 0
  13. ),
  14. Array
  15. (
  16. 'material_id' => 61,
  17. 'material_name' => '胶版',
  18. 'parent_id' => 0
  19. ),
  20. Array
  21. (
  22. 'material_id' => 95,
  23. 'material_name' => '高级哑粉',
  24. 'parent_id' => 0
  25. ),
  26. Array
  27. (
  28. 'material_id' => 4,
  29. 'material_name' => '250g铜版纸',
  30. 'parent_id' => 1
  31. ),
  32. Array
  33. (
  34. 'material_id' => 5,
  35. 'material_name' => '200g铜版纸',
  36. 'parent_id' => 1
  37. ),
  38. Array
  39. (
  40. 'material_id' => 27,
  41. 'material_name' => '250g哑粉纸',
  42. 'parent_id' => 26
  43. ),
  44.  
  45. Array
  46. (
  47. 'material_id' => 28,
  48. 'material_name' => '200g哑粉纸',
  49. 'parent_id' => 26
  50. ),
  51. Array
  52. (
  53. 'material_id' => 29,
  54. 'material_name' => '200g哑粉纸的子项',
  55. 'parent_id' => 28
  56. ),
  57. Array
  58. (
  59. 'material_id' => 30,
  60. 'material_name' => '200g哑粉纸的子项的子项',
  61. 'parent_id' => 29
  62. )
  63. );

二、变形后的数组形式

  1. array (
  2. 0 =>
  3. array (
  4. 'material_id' => 1,
  5. 'material_name' => '铜板纸',
  6. 'parent_id' => 0,
  7. 'children' =>
  8. array (
  9. 0 =>
  10. array (
  11. 'material_id' => 4,
  12. 'material_name' => '250g铜版纸',
  13. 'parent_id' => 1,
  14. ),
  15. 1 =>
  16. array (
  17. 'material_id' => 5,
  18. 'material_name' => '200g铜版纸',
  19. 'parent_id' => 1,
  20. ),
  21. ),
  22. ),
  23. 1 =>
  24. array (
  25. 'material_id' => 26,
  26. 'material_name' => '哑粉纸',
  27. 'parent_id' => 0,
  28. 'children' =>
  29. array (
  30. 0 =>
  31. array (
  32. 'material_id' => 27,
  33. 'material_name' => '250g哑粉纸',
  34. 'parent_id' => 26,
  35. ),
  36. 1 =>
  37. array (
  38. 'material_id' => 28,
  39. 'material_name' => '200g哑粉纸',
  40. 'parent_id' => 26,
  41. 'children' =>
  42. array (
  43. 0 =>
  44. array (
  45. 'material_id' => 29,
  46. 'material_name' => '200g哑粉纸的子项',
  47. 'parent_id' => 28,
  48. 'children' =>
  49. array (
  50. 0 =>
  51. array (
  52. 'material_id' => 30,
  53. 'material_name' => '200g哑粉纸的子项的子项',
  54. 'parent_id' => 29,
  55. ),
  56. ),
  57. ),
  58. ),
  59. ),
  60. ),
  61. ),
  62. 2 =>
  63. array (
  64. 'material_id' => 61,
  65. 'material_name' => '胶版',
  66. 'parent_id' => 0,
  67. ),
  68. 3 =>
  69. array (
  70. 'material_id' => 95,
  71. 'material_name' => '高级哑粉',
  72. 'parent_id' => 0,
  73. ),
  74. )

 三、实现代码

  1. public function ceshi($arr, &$arrParent = [])
  2. {
  3. // 首次获取parent_id = 0的相关父级项
  4. foreach ($arr as $key => $val) {
  5. if ($val['parent_id'] == 0) {
  6. $arrParent[] = $val;
  7. unset($arr[$key]);
  8. }
  9. }
  10.  
  11. foreach ($arrParent as $parentKey => $parent) {
  12. foreach ($arr as $key => $val) {
  13. if ($val['parent_id'] == $parent['material_id']) {
  14. $arrParent[$parentKey]['children'][] = $val;
  15. unset($arr[$key]); // 匹配完成则删除
  16. $this->ceshi($arr, $arrParent[$parentKey]['children']);
  17. }
  18. }
  19. }
  20.  
  21. return $arrParent;
  22. }

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. Windows平台Python编程必会模块之pywin32

    在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高了. 不过,python模块虽多,也不可能满足开发者的所有需 ...

  2. 【243】◀▶IEW-Unit08

    Unit 8 Environment I. 不定式(to do)在雅思写作中的运用 1)名词 • 主语(句首) To protect the environment is everyone's dut ...

  3. [poj3071]football概率dp

    题意:n支队伍两两进行比赛,求最有可能获得冠军的队伍. 解题关键:概率dp,转移方程:$dp[i][j] +  = dp[i][j]*dp[i][k]*p[j][k]$表示第$i$回合$j$获胜的概率 ...

  4. ACM-ICPC2018北京网络赛 80 Days(双端队列+尺取)

    题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...

  5. JAVA企业级开发-sql入门(07)

    一. 数据库 什么是数据库? 就是一个文件系统,通过标准SQL语言操作文件系统中数据 ---- 用来存放软件系统的数据 我们今天学习的数据库是mysql.关系型数据库. 什么是关系化数据库 ? 保存关 ...

  6. SCUT - 299 - Kaildls的数组划分 - dp - 高精

    https://scut.online/p/299 \(dp[i][k]\) 为前 \(i\) 个数分 \(k\) 组的最大值,那么 $dp[i][k]=max_{p=1}^{i-1}{dp[p][k ...

  7. 添加自定义字段至Solr 的 ExtractingRequestHandler

    利用SolrJ 上传文件至Solr进行索引,比如索引一个test.pdf文件,我想在索引里添加一个文件名的字段,我在manager-schema里添加了一个字段,为“fileName”, 然后按照 g ...

  8. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  9. IT兄弟连 Java语法教程 Java语言的其他特性

    Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ●  语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...

  10. Request a certificate from a certificate vendor

    Request a certificate from a certificate vendor Now, with your CSR in hand, visit the Web site of yo ...