这是我的阵列:
array(1) {
["farm"]=>
array(1) {
["animals"]=>
array(1) {
[horses]=>
array(4) {
["fred.jpg"]=>
string(63) "farm/animals/horses/fred.jpg"
["sam.jpg"]=>
string(74) "farm/animals/horses/sam.jpg"
["alan.jpg"]=>
string(64) "farm/animals/horses/alan.jpg"
["john.jpg"]=>
string(63) "farm/animals/horses/john.jpg"
}
}
}
}
我想将其转换为ul列表,因此结果应为:
<ul>
<li>farm
<ul>
<li>animals
<ul>
<li>horses
<ul>
<li>fred.jpg</li>
<li>sam.jpg</li>
<li>alan.jpg</li>
<li>john.jpg</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
我使用了这个功能:
function array2ul($array) {
$output = '<ul>';
foreach ($array as $key => $value) {
$function = is_array($value) ? __FUNCTION__ : 'htmlspecialchars';
$output .= '<li>' . $key . '</li>';
}
return $output . '</ul>';
}
但结果是:
<ul>
<li>farm
<ul>
<li>animals
<ul>
<li>horses
<ul>
<li>fred.jpg</li>
<li>farm/animals/horses/sam.jpg</li>
<li>farm/animals/horses/alan.jpg</li>
<li>farm/animals/horses/john.jpg</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
答案 0 :(得分:6)
你必须使用递归函数:
function recursiveArrayToList(Array $array = array())
{
echo '<ul>';
foreach ($array as $key => $value) {
echo '<li>' . $key . '</li>';
if (is_array($value)) {
recursiveArrayToList($value);
}
}
echo '</ul>';
}
recursiveArrayToList($initialArray);