【发布时间】:2021-08-23 01:18:06
【问题描述】:
我有一个函数可以提供以下格式的数组
$result = [
[
"name" => "text",
"id" => "928610",
"entity_type" => "node"
],
[
"name" => "folder",
"id" => "987620",
"entity_type" => "folder"
],
[
"name" => "text",
"id" => "956720",
"entity_type" => "node"
],
];
每个文件夹 "entity_type" => "文件夹" 项又有一个返回相同格式数组的子项。
如果我们运行一个 foreach 循环 $result 并且如果它是 "entity_type" => "folder" 那么我们将 id 传递给一个函数,它也会给出与 result 类似的数组格式。
所以我需要如果它是“entity_type”=>“folder”下面的键添加到“entity_type”=>“folder”项
"children" => [
'#theme' => 'child_elements',
'#child_elements' => [
[
'name' => 'text',
"id" => "333421",
"entity_type" => "node"
],
[
'name' => 'folder',
"id" => "897622",
"entity_type" => "folder"
],
[
'name' => 'text',
"id" => "342214",
"entity_type" => "node"
],
],
],
如果 "entity_type" => "folder"
,它应该递归地继续添加最终的数组应该是
$result = [
[
"name" => "text",
"id" => "928610",
"entity_type" => "node"
],
[
"name" => "folder",
"id" => "987620",
"entity_type" => "folder"
"children" => [
'#theme' => 'child_elements',
'#child_elements' => [
[
'name' => 'text',
"id" => "333421",
"entity_type" => "node"
],
[
'name' => 'folder',
"id" => "897622",
"entity_type" => "folder"
],
[
'name' => 'text',
"id" => "342214",
"entity_type" => "node"
],
],
],
],
[
"name" => "text",
"id" => "956720",
"entity_type" => "node"
],
];
public function buildTree($elements) {
$branch = [];
$branch = ['#theme' => 'child_elements'];
foreach ($elements as $key => $element) {
foreach($element as $keys => $values){
if ($element['bundle'] == 'folder') {
$child = $this->loadElements($element['id']);
$branch['#child_elements'] = $child;
$element[$key]['children'] = $branch['#child_elements'];
$this->buildTree($child);
array_push($branch, $element);
}else{
$branch['#child_elements'][] = $element;
}
}
}
return $branch;
}
【问题讨论】:
-
在你的第一个 $result 数组中,当循环到达带有“id”=>“987620”的文件夹时=我在哪里寻找可能的孩子?还有其他数组吗?
-
我已经尝试过,但数组不符合预期。
-
我如何实现这一目标
-
@SidharthSahu - 您的尝试是该过程的重要组成部分。它表明您已经尝试过,而不仅仅是要求某人为您解决问题。它向我们展示了您的误解可能在哪里,以便我们可以在您需要的地方为您提供帮助。请发布您的尝试
标签: php recursion multidimensional-array drupal-8