我有一个数组($ title,$ depth)
$title($depth)
////////////////////////////////////
ELECTRONICS(0)
TELEVISIONS(1)
TUBE(2)
LCD(2)
PLASMA(2)
PORTABLE ELECTRONICS(1)
MP3 PLAYERS(2)
FLASH(3)
CD PLAYERS(2)
2 WAY RADIOS(2)
//////////////////////
如何使用<ul><li>
答案 0 :(得分:0)
它的基础知识...跟踪深度,打印出<ul>
和</ul>
标签,以向当前深度微调深度。请注意,HTML不需要</li>
标记,这会让生活更轻松。您可以在每个项目之前打印出<li>
,然后根据需要让元素自行关闭。
现在,关于遍历列表的具体细节,它取决于结构(在编辑时,您不必分享)。但是,我可以通过两种合理的方式来构建这样的列表。
$depth = -1;
// May be foreach($arr as $title => $itemDepth), depending on the structure
foreach ($arr as $item)
{
// if you did the 'other' foreach, get rid of this
list($title, $itemDepth) = $item;
// Note, this only works decently if the depth increases by
// at most one level each time. The code won't work if you
// suddenly jump from 1 to 5 (the intervening <li>s won't be
// generated), so there's no sense in pretending to cover that
// case with a `while` or `str_repeat`.
if ($depth < $itemDepth)
echo '<ul>';
elseif ($depth > $itemDepth)
echo str_repeat('</ul>', $depth - $itemDepth);
echo '<li>', htmlentities($title);
$depth = $itemDepth;
}
echo str_repeat('</ul>', $depth + 1);
这不会生成有效的XHTML。但是大多数人不应该使用XHTML。
答案 1 :(得分:0)
您可以使用这样的递归函数。
$data = array(
'electronics' => array(
'televisions' => array(
'tube',
'lcd',
'plasma',
),
'portable electronics' => array(
'MP3 players' => array(
'flash',
),
'CD players',
'2 way radios',
),
),
);
function build_ul($contents){
$list = "<ul>\n";
foreach($contents as $index => $value){
if(is_array($value)){
$item = "$index\n" . build_ul($value);
} else {
$item = $value;
}
$list .= "\t<li>$item</li>\n";
}
$list .= "</ul>\n";
return $list;
}
print build_ul($data);
您必须修改该功能才能添加显示该类别总数的数字。
请注意,由于PHP未针对处理递归函数(如某些其他语言(例如Lisp))进行优化,因此如果您有大量数据,则可能会遇到性能问题。另一方面,如果你的层次结构深度超过三层或者四层,你就会开始遇到问题,因为很难在一个网页中明显地显示那么多层次结构。