我有一个像
这样的数组结构[members] => Members List | 26
[member.php?id=3] => John | 26-26
[member.php?id=4] => Alice | 26-26
[member.php?id=5] => Michel | 26-26
[news] => News details | 45
[alerts] > Alerts | 32
我使用foreach循环遍历这个。我想打印整个列表作为UL LI。成员列表将是一个LI,但当它的孩子来(memeber.php?id = *)等时,它应该继承UL LI。我希望孩子成为嵌套的LIs
CODE
$counter = 0;
foreach($array as $key => $values)
{
if($counter == 0)
{
echo "<ul>";
}
if($key != "" && $key != "END")
{
echo "<li>".$values."</li>";
}
if($key == "END")
{
echo "</ul>";
}
$counter++;
}
答案 0 :(得分:0)
您的脚本无效,因为您已将网址引用为$key
,但仍然使用循环内的$url
访问这些网址。
这是你应该怎么做的。
$counter = 0;
foreach($array as $url => $values)
{
if($counter == 0)
{
echo "<ul>";
}
if($url != "" && $url != "END")
{
echo "<li>".$values."</li>";
}
if($url == "END")
{
echo "</ul>";
}
$counter++;
}
但是从数组中创建列表的一种简单方法是
//First remove the END key from the array, is not needed
echo "<ul>";
foreach($array as $link => $value) {
//THERE is no way $link can be ""
echo "<li><a href=\"$link\">$value</a></li>";
}
echo "</ul>";
答案 1 :(得分:0)
我不确切知道你有什么问题。但我想,你想要这样的事情:
<ul>
<li>
<a href="members">Members List</a>
<ul>
<li><a href="member.php?id=3">John</a></li>
<li><a href="member.php?id=4">Alice</a></li>
<li><a href="member.php?id=5">Michel</a></li>
</ul>
</li>
<li><a href="news">News details</a></li>
<li><a href="alerts">Alerts</a></li>
</ul>
如果是,那么我建议你改变阵列结构。数组也可以嵌套。如果你有这样的东西会更容易:
$data = array(
array('members', 'Members List', array(
array('member.php?id=3', 'John'),
array('member.php?id=4', 'Alice'),
array('member.php?id=5', 'Michel'),
)),
array('news', 'News details'),
array('alerts', 'Alerts')
);
然后,以下代码将其转换为HTML:
echo '<ul>';
foreach ($data as $item) {
// $item[0] -> href/url, $item[1] -> label/text, $item[2] -> subitems
echo '<li>';
echo '<a href="' . $item[0] . '">' . $item[1] . '</a>';
if (isset($item[2])) { // if this item has subitems...
echo '<ul>';
foreach ($item[2] as $subitem) {
// $subitem[0] -> href/url, $subitem[1] -> label/text
echo '<li><a href="' . $subitem[0] . '">' . $subitem[1] . '</a></li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';