我将这个地址称为函数olLiTree
PHP function that creates a nested ul li?
我有这个数组
$ tree = 阵列( “A”=>阵列( “B”=>阵列( “C”=> “中C”, “d”=> “中d”), “E”=>阵列( “F” => “中F”, “G”=> “中G”)));
但无法使用此功能
function olLiTree($tree)
{
echo '<ul>';
foreach($tree as $item) {
if (is_array($item)) {
olLiTree($item);
} else {
echo '<li>', $item, '</li>';
}
}
echo '</ul>';
}
生成
<ul>
<li>A</li>
<li>B
<ul>
<li>C</li>
<li>D</li>
</ul>
</li>
<li>E
<ul>
<li>F
</li>
</ul>
</li>
<ul>
<li>G</li>
</ul>
</ul>
任何人都可以帮我解决这个问题吗? 感谢..
答案 0 :(得分:8)
function olLiTree($tree) {
$out = '<ul>';
foreach($tree as $key => $value) {
$out.= '<li>';
if (is_array($value)) {
$out.= $key . olLiTree($value);
} else {
$out.= $value;
}
$out.= '</li>';
}
$out.= '</ul>';
return $out;
}
始终return
最终输出,不要直接echo
。有一天,当你发现不希望立即echo
时,你会感谢自己。 :)
您可能希望将数组结构更改为此,因为它不那么冗余(与上面的代码一起使用):
$tree = array('A', 'B', 'C' => array('CA', 'CB'), 'D');
答案 1 :(得分:1)
通过使用这样的东西它应该工作(我没有测试它,所以希望我没有犯任何令人尴尬的错误):
function olLiTree($tree)
{
echo '<ul>';
foreach($tree as $key => $item) {
if (is_array($item)) {
echo '<li>', $key;
olLiTree($item);
echo '</li>';
} else {
echo '<li>', $item, '</li>'; // Or use $key here as well
}
}
echo '</ul>';
}
如果要完全匹配给定的示例,则需要修改数组,因为它与结果不匹配。 (但我想这不是问题)