如何读取具有大量嵌套实体的数组

时间:2016-09-02 14:39:28

标签: php arrays nested

我是一名新手PHP程序员。我今天遇到了一个问题。这就是事情。

我有一个像这样的数组

$array = array( "id" => 1,
                "region"=>"world", 
                "parentid" => 0, 
                "children" => array("id" => 39, 
                                    "region"=>"asia",
                                    "parentid" => 1, 
                                    "children" => array("id" => 70, 
                                                        "region"=>"china",
                                                        "parentid" => 39
                                                        )
                                )
            );

我想得到一些结果,比如这个结构。

world
  |-  asia
  |-----  china

这是我的代码,它看起来非常糟糕,即使它有效。但是当水平超过3时它不会很好。

$array = array();
$count = 0;
for ($i = 0; $i < count($dep); $i++) {
$array[]["region"] = $dep[$i]["region"];
if (isset($dep[$i]["children"])) {
    for ($ii = 0; $ii < count($dep[$i]["children"]); $ii++) {
        $array[]["region"] = $dep[$i]["children"][$ii]["region"];
        if (isset($dep[$i]["children"][$ii]["children"])) {
            for ($iii = 0; $iii < count($dep[$i]["children"][$ii]["children"]); $iii++) {
                $array[]["region"] = $dep[$i]["children"][$ii]["children"][$iii]["region"];
            }
        }
    }
}
}

return $array;

必须有一些更好的解决方案才能解决问题。任何帮助都会很感激。

1 个答案:

答案 0 :(得分:0)

你应该利用递归。这意味着一个自我调用的函数。让我在这里粘贴一个函数:

$array = [
  [
    "region" => "world",
    "children" => [
      [
        "region"=> "asia",
        "children" => [
          [ "region"=> "china" ],
        ]
      ],
      [
        "region"=> "europe",
        "children" => [
          [ "region"=>"czech republic" ],
        ]
      ]
    ]
  ]
];


function format($dataset, $prefix = '')
{
  foreach ($dataset as $data) {
    echo $prefix . ' ' . $data['region'] . '<br>';

    if (! isset($data['children'])) {
      return;
    }

    format($data['children'], $prefix . '--');
  }
}

format($array);

你必须改变一下数组的结构,但功能要简单得多。此外,idparent密钥也会变得多余。