如何在 php 中显示数组中的父项和子项

How to show parent and child items form array in php

我是 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"
      }
    }

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

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

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

第一关:

  • 父项不为空:

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

  • 父项为空:

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

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

循环遍历源数组 $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