php - 创建每个数组项的路径
问题描述
我已经构建了一个递归 PHP 函数来创建一个包含父/子的多维数组。现在我想创建一个函数来创建一个包含每个数组项路径的列表。请参阅以下数组:
$testdata = [
['id' => 1, 'parent_id' => null, 'desc' => 'Vehicles'],
['id' => 2, 'parent_id' => 1, 'desc' => 'Cars'],
['id' => 3, 'parent_id' => 1, 'desc' => 'Motorbikes'],
['id' => 4, 'parent_id' => 1, 'desc' => 'Planes'],
['id' => 5, 'parent_id' => 2, 'desc' => 'Toyota'],
['id' => 6, 'parent_id' => 2, 'desc' => 'Volkswagen'],
['id' => 7, 'parent_id' => 2, 'desc' => 'Renault'],
['id' => 8, 'parent_id' => 3, 'desc' => 'Honda'],
['id' => 9, 'parent_id' => 3, 'desc' => 'Yamaha'],
['id' => 10, 'parent_id' => 4, 'desc' => 'Boeing'],
['id' => 11, 'parent_id' => null, 'desc' => 'Cities'],
['id' => 12, 'parent_id' => 11, 'desc' => 'Amsterdam'],
['id' => 13, 'parent_id' => 11, 'desc' => 'New York'],
];
现在预期的结果应该是这样的:
$output = [
'Vehicles'
'Vehicles\Cars'
'Vehicles\Cars\Toyota'
'Vehicles\Cars\Volkswagen'
'Vehicles\Cars\Renault'
'Vehicles\Motorbikes'
'Vehicles\Motorbikes\Honda'
'Vehicles\Motorbikes\Yamaha'
'Vehicles\Planes'
'Vehicles\Planes\Boeing'
'Cities'
'Cities\Amsterdam'
'Cities\New York'
];
我试图重建我的递归函数,但我无法绕过它。你们能给我一些建议或推动我朝着正确的方向前进吗?
解决方案
这种方式通过构建输出和项目层次结构来解决问题。因此,每次获得新项目时,您都会构建一个表示“父文本”的字符串,并将当前项目添加到输出中。当稍后提到父级时 - 它可以只挑选出构建的文本表单$levels
,而不必重新构建它......
$output = [];
$levels = [];
foreach ( $testdata as $entry ) {
if ( $entry["parent_id"] == null ) {
$text = $entry["desc"];
}
else {
$text = $levels[$entry["parent_id"]] . "/" . $entry["desc"];
}
$levels[$entry["id"]] = $text;
$output [] = $text;
}
// Optionally sort output to group items
sort($output);
print_r($output);
排序会将项目组合在一起 - 否则它们将按照它们在输入数组中的顺序出现。
输出排序...
Array
(
[0] => Cities
[1] => Cities/Amsterdam
[2] => Cities/New York
[3] => Vehicles
[4] => Vehicles/Cars
[5] => Vehicles/Cars/Renault
[6] => Vehicles/Cars/Toyota
[7] => Vehicles/Cars/Volkswagen
[8] => Vehicles/Motorbikes
[9] => Vehicles/Motorbikes/Honda
[10] => Vehicles/Motorbikes/Yamaha
[11] => Vehicles/Planes
[12] => Vehicles/Planes/Boeing
)
推荐阅读
- java - 为什么 label.equals(label1) 代码看不到 label1?
- qemu - 拼命地试图在 qemu 上运行 raspbian buster,挂在黑屏上
- powerbi - 为什么使用过滤器计算会返回此结果?
- javascript - 如何从动物数据库查询中检索文档 ID
- c - #define 与 const 全局
- reactjs - 获取当前用户 React Symfony
- azure-functions - Azure Function App - 连接字符串错误
- ios - 更新 Firestore 文档中数组中的字段
- lua - 在lua中按住一个键
- c - 在 C 中使用点进行变量声明