如何在 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
}
}
}
}
我是 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
}
}
}
}