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


Iterate through two arrays, looping one continuously until the other is finished (i.e. Assign colors to menu navigation items)

OK。无法获得任何类似的引用。我有两个数组,一个设置我的菜单导航项:

    $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_item迭代没有完成(,我如何让颜色数组重新启动??对此事的任何帮助都将不胜感激!

附言:我也试过把它作为一个迭代器,但没能完全发挥作用。也许这毕竟是最好的响应,但我仍然无法让colors数组循环回来以完成nav_items数组循环。

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++;
}

编辑:哎哟,对不起,没有意识到你有你想用作CSS类的颜色名称作为数组中的键。。。如果你必须以这种方式组织它,你可以这样做:

$color_classes = array_keys($colors);

然后在我上面提供的片段中使用$color_classes而不是$colors。