0

好的 不能完全参考类似的东西。我有两个数组,一个设置我的菜单导航项:

    $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 迭代不是)?任何有关此事的帮助将不胜感激!

PS我也试过这个作为一个迭代器,但不能让它工作。毕竟这也许是最好的回应,但我仍然无法让颜色数组循环回来以完成 nav_items 数组循环。

4

2 回答 2

1

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

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

编辑:Oups,抱歉,没有意识到你有你想要用作 CSS 类的颜色名称作为数组中的键......如果你必须以这种方式组织它,你可以这样做:

$color_classes = array_keys($colors);

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

于 2013-05-23T18:07:27.557 回答
1
if (current($colors) === false) reset($colors);
于 2013-05-23T18:06:31.017 回答