$dirs = array(
'root_dir' => array(
'sub_dir_1' => array(
0 => 'file'
),
'sub_dir_2' => array(
0 => 'file'
),
'sub_dir_3' => array(
0 => 'file_1',
1 => 'file_2',
2 => 'file_3'
)
),
);
$render = function($dirs) use (&$render) {
echo "<ul>";
foreach ($dirs as $parent => $children) {
if (is_string($parent) === true) {
echo "<li>$parent</li>";
$render($children);
} else {
echo "<li>$children</li>";
}
}
echo "</ul>";
};
$render($dirs);
输出
<ul>
<li>root_dir</li>
<ul>
<li>sub_dir_1</li>
<ul>
<li>file</li>
</ul>
<li>sub_dir_2</li>
<ul>
<li>file</li>
</ul>
<li>sub_dir_3</li>
<ul>
<li>file_1</li>
<li>file_2</li>
<li>file_3</li>
</ul>
</ul>
</ul>
需要的输出
<ul>
<li>
root_dir
<ul>
<li>
sub_dir_1
<ul>
<li>file</li>
</ul>
</li>
<li>
sub_dir_2
<ul>
<li>file</li>
</ul>
</li>
<li>
sub_dir_3
<ul>
<li>file_1</li>
<li>file_2</li>
<li>file_3</li>
</ul>
</li>
</ul>
</li>
</ul>
我做错了什么?
答案 0 :(得分:6)
echo "<li>$parent</li>";
$render($children);
应该是:
echo "<li>".$parent;
$render($children);
echo "</li>";
否则您的孩子不在父<li>
之内。
答案 1 :(得分:0)
$render = function($dirs) use (&$render) {
foreach ($dirs as $parent => $children) {
$s .= "<li>" . (is_string($parent) ? $parent . $render($children) : $children) . "</li>";
}
return "<ul>$s</ul>";
};
echo $render($dirs);
is_string
会返回true
或false
,因此无需进行===
比较。echo
遍布整个地方,我选择一次性构建字符串,最后echo
。这允许$render($children)
的输出在foreach
循环</li>
声明中有一个备用的echo
- 我将其删除了。希望它对你有用。