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

Php 使用ID和ParentID从一维数组创建多维数组,php,arrays,nested,associative-array,Php,Arrays,Nested,Associative Array,这是为了创建带有子菜单的菜单 如果有什么帮助的话,我创建了一个可视化我想要的东西(在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: FF

这是为了创建带有子菜单的菜单

如果有什么帮助的话,我创建了一个可视化我想要的东西(在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 },
]
要创建这个,基本上:

  • 如果项具有父项\u id
    • 把它放在密钥childs:[…]中的父id下
  • 否则
    • 将项直接置于新数组下
这必须能够支持无限数量的嵌套子对象

[
  {
    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
  }
]
由于初始数组的顺序是未知的,并且父数组的ID可以在该数组中的实际父数组之前出现,所以我不知道如何做到这一点


谢谢大家!

您需要在阵列上循环几次:

  • 在数组上循环并检查所有没有父id的项。它们是根级别的项目。将它们放入一个新数组中。将它们从原始阵列中删除
  • 在数组上循环,并检查所有项目的
    父\u id
    是否在新数组中。如果是,则将其作为父项id的子项放入新数组中。将它们从原始阵列中删除
  • 重复2,直到原始数组为空

  • 谢谢你的回答。但是我不能让它工作。你知道一个我可以查的例子吗?