Php 将子菜单项的数量限制为4个

Php 将子菜单项的数量限制为4个,php,Php,我试图将子菜单项(li)的数量限制为最多4个。我不是php开发人员,但尝试了一些代码,如下所示 这是现有的代码,它将继续显示所有内容,目前没有设置限制 if (count($sub_menu_array)) { echo '<nav id="sub-nav"><ul>'; foreach ($sub_menu_array as $sub_menu_row) { // print_r($sub_menu_row);

我试图将子菜单项(li)的数量限制为最多4个。我不是php开发人员,但尝试了一些代码,如下所示

这是现有的代码,它将继续显示所有内容,目前没有设置限制

if (count($sub_menu_array)) {
        echo '<nav id="sub-nav"><ul>';
        foreach ($sub_menu_array as $sub_menu_row) {
            // print_r($sub_menu_row);
            echo '<li><a href="'.HTTP_HOST.$sub_menu_row['categoryPath'].'">'.strtoupper($sub_menu_row['categoryName']).'</a></li>';
        }

        echo '</ul></nav>';
    } else {
        echo '<nav id="sub-nav"><ul><li></li></ul></nav>';
    }
if(计数($sub_菜单_数组)){
回声“
    ”; foreach($sub_menu_数组作为$sub_menu_行){ //打印(子菜单行); 回音“
  • ”; } 回声“
”; }否则{ 回音“
    • ”; }
这是我试过的,但结果什么也没显示

if (count($sub_menu_array)) {
        echo '<nav id="sub-nav"><ul>';
        $i = 0;
        foreach ($sub_menu_array as $sub_menu_row => $v) {
            // print_r($sub_menu_row);
            echo '<li><a href="'.HTTP_HOST.$sub_menu_row['categoryPath'].'">'.strtoupper($sub_menu_row['categoryName']).'</a></li>';
            if (++$i == 3) break;
        }

        echo '</ul></nav>';
    } else {
        echo '<nav id="sub-nav"><ul><li></li></ul></nav>';
    }
if(计数($sub_菜单_数组)){
回声“
    ”; $i=0; foreach($sub_menu_数组作为$sub_menu_行=>$v){ //打印(子菜单行); 回音“
  • ”; 如果(++$i==3)中断; } 回声“
”; }否则{ 回音“
    • ”; }
使用此代码

<?php
if (count($sub_menu_array)) {
        echo '<nav id="sub-nav"><ul>';
        $i = 0;
        foreach ($sub_menu_array as $sub_menu_row => $v) {
            // print_r($sub_menu_row);
            echo '<li><a href="'.HTTP_HOST.$sub_menu_row['categoryPath'].'">'.strtoupper($sub_menu_row['categoryName']).'</a></li>';
            if ($i == 3)
            { 
                break;
            }
            $i++;
        }

        echo '</ul></nav>';
    } else {
        echo '<nav id="sub-nav"><ul><li></li></ul></nav>';
    }
    ?>

您已经更改了foreach,现在应该使用$v作为值

if (count($sub_menu_array)) {
    echo '<nav id="sub-nav"><ul>';
    $i = 0;
    foreach ($sub_menu_array as $sub_menu_row => $v) {
        // print_r($sub_menu_row);
        echo '<li><a href="'.HTTP_HOST.$v['categoryPath'].'">'.strtoupper($v['categoryName']).'</a></li>';
        if (++$i == 3) break;
    }

    echo '</ul></nav>';
} else {
    echo '<nav id="sub-nav"><ul><li></li></ul></nav>';
}
if(计数($sub_菜单_数组)){
回声“
    ”; $i=0; foreach($sub_menu_数组作为$sub_menu_行=>$v){ //打印(子菜单行); 回音“
  • ”; 如果(++$i==3)中断; } 回声“
”; }否则{ 回音“
    • ”; }
对于菜单部分,这应该足够了:

echo '<nav id="sub-nav"><ul>';
$i = 0;
foreach ($sub_menu_array as $sub_menu_row => $v) {
    if($i < 4) {
        echo '<li><a href="'.HTTP_HOST.$sub_menu_row['categoryPath'].'">'.strtoupper($sub_menu_row['categoryName']).'</a></li>';
    }
    $i++;
}

echo '</ul></nav>';
echo'
    '; $i=0; foreach($sub_menu_数组作为$sub_menu_行=>$v){ 如果($i<4){ 回音“
  • ”; } $i++; } 回声“
”;
在显示菜单之前插入此行

$sliced_sub_menu_array = array_slice($sub_menu_array, 0, 4);
然后

foreach ($sliced_sub_menu_array as $sub_menu_row => $v) {
    // displaying here
}

PHP foreach语句的语法有两种不同的变体

foreach (array_expression as $value){
    statement
}
foreach (array_expression as $key => $value)
    statement
当您从

foreach ($sub_menu_array as $sub_menu_row) {

您还更改了适用于$sub_menu_行的值。例如:

$sub_menu_array = array ('a','b');
在第一次迭代的第一个变量中

$sub_menu_row=='a'
第二种变体

$sub_menu_row==0 #array's element key
$v=='a' #value
有两种解决方案

  • 只需删除“=>$v”
  • 将foreach语句中的$sub_menu_行更改为$v

  • 为什么要添加“=>$v”?您将$sub_menu_row设置为键,但没有设置为值老实说,我不知道,刚才只是查看了一个示例并试用了它,我更喜欢前端而不是后端。只需删除“=>$v”@rjhdby-perfect,现在效果很好,谢谢。我当时差点就明白了:)。如果你想把它作为一个答案写下来,你很乐意接受。或者你甚至可以像$sub_menu_array=array_slice($sub_menu_array,0,4)那样使用它;如果你不必使用整个菜单项列表,我将不工作。循环仍然引用数组的键,而不是值。此代码错误$sub_menu_row是$sub_menu_数组的键,但作者需要它的值。
    $sub_menu_row==0 #array's element key
    $v=='a' #value