Php 迭代两个数组,一个连续循环,直到另一个数组完成(即为菜单导航项指定颜色)

Php 迭代两个数组,一个连续循环,直到另一个数组完成(即为菜单导航项指定颜色),php,arrays,loops,iterator,cycle,Php,Arrays,Loops,Iterator,Cycle,好的,我不太可能找到类似的参考资料。我有两个数组,其中一个设置我的菜单导航项: $nav_items = array('item1_link'=>'item1_displayname', 'item2_link'=>'item2_displayname', 'item3_link'=>'item3_displayname', . .

好的,我不太可能找到类似的参考资料。我有两个数组,其中一个设置我的菜单导航项:

    $nav_items = array('item1_link'=>'item1_displayname',
                       'item2_link'=>'item2_displayname',
                       'item3_link'=>'item3_displayname',
                       . . .
然后,我有了第二个数组,它设置了许多可能的颜色:

    $colors = array('red'=>'#f00',
                    'green'=>'#090',
                    'yellow'=>'fc0',
                    . . .
我们的想法是将这两者合并,以便得到以下结果:

    <a class="red" href="item1_link">item1_displayname</a>
    <a class="green" href="item2_link">item2_displayname</a>
    <a class="yellow" href="item3_link">item3_displayname</a>

问题是:假设我有10个菜单项,我决定7种不同的颜色。其思想是(这就是我被卡住的地方)主循环将迭代10个菜单项,分配给第二个循环中的每一个颜色项,该循环应循环一次,然后循环第二次(以及第三次,如有必要),直到组1中的所有项都已用完。 也许我想要的一个例子会更有帮助:

    <a class="red" href="item1_link">item1_displayname</a>
    <a class="green" href="item2_link">item2_displayname</a>
    <a class="yellow" href="item3_link">item3_displayname</a>
    <a class="blue" href="item4_link">item4_displayname</a>
    <a class="orange" href="item5_link">item5_displayname</a>
    <a class="purple" href="item6_link">item6_displayname</a>
    <a class="gray" href="item7_link">item7_displayname</a>
    <a class="red" href="item8_link">item8_displayname</a> <!--Notice how colors restart here-->
    <a class="green" href="item9_link">item9_displayname</a>
    <a class="yellow" href="item10_link">item10_displayname</a>

因此,就PHP代码而言,我现在得到的是:

    <?php
    reset($nav_items);
    reset($colors);    

    while ((list($nav_link, $nav_name) = each($nav_items))) {
        list($color_name) = each($colors);
    ?>

    <li><a class="<?php echo $color_name ?>" href="<?php echo $nav_link ?>"><?php echo $nav_name ?></a></li>

    <?php
    }
    ?>

  • 这还不错,但只在颜色数组中使用一次,然后为其余菜单导航项重复最后一种颜色。 那么,如何让颜色数组在迭代完成后(而nav_项迭代没有完成)重新启动呢?? 在此问题上的任何帮助都将不胜感激


    顺便说一句,我也尝试过将其作为迭代器,但无法完全使其工作。也许这是最好的响应,但我仍然无法获得颜色数组回环以完成NaviTases数组循环。

    < P>您可能需要考虑使用模运算符:

    if (current($colors) === false) reset($colors);
    
    $number_of_colors = count($colors);
    $loop_count = 0;
    foreach($nav_items as $nav_link => $nav_name) {
        $use_color = $colors[$loop_count % $number_of_colors];
        echo "<li><a class='{$use_color}' href='{$nav_link}'>{$nav_name}</a></li>\n";
        $loop_count++;
    }
    

    然后使用$color\u类,而不是我上面提供的代码片段中的$colors。

    似乎是一个优雅的解决方案;然而,我复制了它的原样,得到了一个“未定义的偏移量”错误。不过,非常感谢您的快速回答!是的,对不起,我想用我的编辑评论应该可以;我第一次回答时,你没有领会你组织
    $colors
    数组的方式。
    $color_classes = array_keys($colors);