【问题标题】:PHP : Recursively add parant child to the multi dimension arrayPHP:递归地将父子添加到多维数组
【发布时间】: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


【解决方案1】:

你需要使用一些逻辑语句,当条件满足时使用array_push。

【讨论】:

  • 这更像是一个评论而不是一个答案
  • 嗯?无论如何,我知道您还没有发布 cmets 的代表,但回答几个问题,您很快就会有足够的评论。当您将 cmets 作为答案发布(您已在此处完成)时,人们很可能会对其投反对票,这会损害您的代表。
猜你喜欢
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2017-04-23
  • 2013-09-06
  • 2019-02-20
  • 2012-08-31
相关资源
最近更新 更多