【问题标题】:How to show parent and child items form array in php如何在php中以数组形式显示父项和子项
【发布时间】:2021-06-17 12:29:36
【问题描述】:

我是 php 新手。也许是一个简单的问题.. 我想制作父->子视图。我有一个这样的数组: 带有密钥 ID 和密钥父级。

如何画出循环正确的结构?也许一开始我需要创建函数来创建树?

    -Apple
     -Services
    Duster


  array(3) {
      [0]=>
      array(6) {
        ["id"]=>
        string(3) "127"
        ["title"]=>
        string(5) "Apple"
        ["deleted"]=>
        string(1) "0"
        ["parent"]=>
        NULL
        ["usp_id"]=>
        string(3) "445"
        ["user_id"]=>
        NULL
      }
      [1]=>
      array(6) {
        ["id"]=>
        string(3) "159"
        ["title"]=>
        string(14) "Renault Duster"
        ["deleted"]=>
        string(1) "0"
        ["parent"]=>
         NULL
        ["usp_id"]=>
        string(3) "495"
        ["user_id"]=>
        NULL
      }
      [2]=>
      array(6) {
        ["id"]=>
        string(1) "7"
        ["title"]=>
        string(8) "Services"
        ["deleted"]=>
        string(1) "0"
        ["parent"]=>
          string(3) "127"
        ["usp_id"]=>
        string(2) "79"
        ["user_id"]=>
        string(3) "275"
      }
    }

【问题讨论】:

    标签: php html parent-child


    【解决方案1】:

    循环遍历源数组$arr 以检测有父(不是null)的记录。找到子记录后,将其推入父记录。

    foreach ($arr as $key0 => $record) {
        if (null !== $record['parent']) {
            foreach ($arr as $key1 => $parent) {
                if ($parent['id'] === $record['parent']) {
                    $arr[$key1]['children'][] = $record; // push child into parent
                    unset($arr[$key0]); // delete child
                }
            }
        }
    }
    

    demo

    【讨论】:

    • jibsteroos,谢谢。这是工作。如何修复未定义的数组键“children”?
    • 您能详细说明一下吗?究竟需要修复什么?显示在3v4l
    • jibsteroos,一切都很好!非常感谢!
    【解决方案2】:

    一个简单而常见的想法是准备好您的数据以便于打印。在您的情况下,您需要对数据进行分组,以便每个项目都包含父数据和子数据。 创建一个临时数组 ($temp)。每个项目都是这样的:

    ['id' =>, 'name' => '', children => ['name' => '']]
    

    并遍历原始数组 ($curr) 两次。

    第一关:

    • parent 不为空:

      $temp[$curr['parent']]['children'][] = ['name' => $curr['name']]

    • 父级为空:

      $temp[$curr['id']] = ['name' => $curr['name'], 'children' => []]

    在第二遍中只需打印它,因为您已经将所有内容分组。

    【讨论】:

    • nitrin0,谢谢。如何将我当前的数组重新组合为新数组,以便每个项目都包含父子数据?
    • 您在另一个答案中已经有了基本相同的想法;)
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多