我是一名新手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;
必须有一些更好的解决方案才能解决问题。任何帮助都会很感激。
答案 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);
你必须改变一下数组的结构,但功能要简单得多。此外,id
和parent
密钥也会变得多余。