使用ID和ParentID从一维创建多维数组

时间:2017-07-14 10:08:35

标签: php arrays nested associative-array

这是创建一个带子菜单的菜单。

如果有任何帮助,我创建了一个JsFiddle来可视化我想要的内容(用HTML格式)。

我有一个没有特定顺序的一维数组:

[
  { id: 1, name: AAA },
  { id: 2, name: BBB, parent_id: 1 },
  { id: 3, name: CCC, parent_id: 2 },
  { id: 4, name: DDD, parent_id: 6 },
  { id: 5, name: EEE },
  { id: 6, name: FFF, parent_id: 1 },
  { id: 7, name: GGG, parent_id: 2 },
]

并且想要创建它,基本上:

  
      
  • IF项目有parent_id      
        
    • 将其放在关键子项内的parent_id下:[..]
    •   
  •   
  • ELSE      
        
    • 将项目直接放在新数组
    • 下   
  •   

这必须能够支持无限数量的嵌套子项。

[
  {
    id: 1,
    name: AAA,
    childs: [{
      id: 2,
      name: BBB,
      childs: [{
        id: 3,
        name: CCC
      }, {
        id: 7,
        name: GGG
      }]
    }, {
      id: 6,
      name: FFF,
      childs: [{
        id: 4,
        name: DDD
      }]
    }]
  }, {
    id: 5,
    name: EEE
  }
]

由于初始数组的顺序未知,而parent_ids可以在该数组中的实际父数据之前,我不知道该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要多次遍历数组:

  1. 在数组上循环,检查没有parent_id的所有项目。它们是根级别的项目。把它们放在一个新的数组中。从原始阵列中删除它们。
  2. 循环遍历数组,如果parent_id位于新数组中,则检查所有项目。如果是,则将其作为parent_id项的子项放入新数组中。从原始阵列中删除它们。
  3. 重复2,直到原始数组为空。