php从数组中设置菜单以进行循环显示

时间:2014-04-27 11:44:16

标签: php arrays loops

$array=array('menu1','menu2','menu3','menu4','menu5','menu6','menu7','menu8','menu9','menu10');

我将一些菜单名称存储到一个数组中,然后输出一些像

enter image description here

在不同的页面中,菜单总是显示5个项目,当前页面总是第2个。

enter image description here

如果当前页面是这种情况,它将在menu10之后循环显示menu1,menu2,menu3。

foreach($array as $k=>$r){
    if($r==$current){
        $n=$k;//count current memu position
    }
}
echo '<ul>';
foreach($d as $k=>$r){
    if($n>1&&$n<7){//normal situation like first image
        if($k==($n-1)){
            echo '<li><a>'.$r.'</a></li>';
        }else if($k==$n){
            echo '<li class="current">'.$r.'</li>';
        }else{
            echo '<li><a>'.$r.'</a></li>';
        }
    }else{
        //How to do in the case of the second image?
    }
}
echo '</ul>';

2 个答案:

答案 0 :(得分:1)

我认为当菜单1:

时,您还希望菜单看起来像这样
menu10
menu1 [selected]
menu2
menu3
menu4

这是算法。它看起来很混乱,但我相信你可以搞清楚。

$array=array('menu1','menu2','menu3','menu4','menu5','menu6',
               'menu7','menu8','menu9','menu10');

$current = 'menu1';


$startIndex = array_search($current, $array)-1;
$total = count($array);
$result = array();

for($index = $startIndex ; $index <$startIndex+5; $index++){

    $result[] = $array[($index+$total)%$total];  //using % operator

}


print_r($result);

答案 1 :(得分:0)

试试这个:

if($k==($n-1)){
    echo '<li><a>'.$r.'</a></li>';
}else if($k==$n){
    echo '<li class="current">'.$r.'</li>';
}else{
    if($k >= count($d)-1)
        echo ''<li><a>'.$d[$k-count($d)+1].'</a></li>';
    else
        echo ''<li><a>'.$r.'</a></li>';
}

这实际上应该适用于这两种情况,因此您可以移除较大的if语句,并将其作为foreach的正文。