在PHP中创建动态数组键结构



我的服务器上存储了文档,它们的信息(如标题、文件路径、日期、类别等)存储在数据库中。我的目标是能够按照文档的类别对它们进行分组。文档的类别以字符串的形式存储在数据库中,如"COVID-19 | Guidance | Mortuary Affairs",我想将其转换为如下所示的数组:

[
"COVID-19" => [
"Guidance"=> [
"Mortuary Affairs" => [
// Where the document info will be
]
]
]
]

第一步是循环遍历文档,并用|分隔符展开每个类别:

foreach($all_documents as $document)
{
$categories = array_map('trim', explode('|', $document['category']));
}

这样做的结果如下:

[
"COVID-19",
"Guidance",
"Mortuary Affairs"
]

我如何把这个数组,并把它变成嵌套数组显示在顶部?

在使用类别创建数组之后,您可以迭代这些类别并"钻取";使用节点引用查找结果对象——创建任何缺失的属性,然后引用它们。最后将文档附加到最深处节点的数组中(这样多个文档就可以在同一位置结束):

$result = [];
foreach ($all_documents as $document) {
$categories = array_map('trim', explode('|', $document['category']));
$node =& $result; // reference the "root"
$last = array_pop($categories);
foreach ($categories as $category) {
if (!isset($node[$category])) $node[$category] = []; // create child
$node =& $node[$category]; // change the reference to the child
}
$node[$last][] = $document; // append document to this list
}

最后,$result将得到期望的层次结构。

最新更新