0

OK 似たようなものへの参照はまったく得られません。2 つの配列があり、1 つはメニュー ナビゲーション項目を設定します。

    $nav_items = array('item1_link'=>'item1_displayname',
                       'item2_link'=>'item2_displayname',
                       'item3_link'=>'item3_displayname',
                       . . .

次に、可能な色の数を設定する 2 番目の配列があります。

    $colors = array('red'=>'#f00',
                    'green'=>'#090',
                    'yellow'=>'fc0',
                    . . .

アイデアは、結果が次のようになるように、これら 2 つをマージすることです。

    <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 のメニュー項目を反復処理し、2 番目のループから色項目のそれぞれに割り当てます。必要に応じて 3 番目など)、グループ 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
    }
    ?>

これは悪くありませんが、色の配列を 1 回だけ通過し、残りのメニュー ナビゲーション項目に対して最後の色を繰り返します。では、反復が終了したら (そして nav_item の反復は終了しません)、カラー配列を再起動するにはどうすればよいですか?? この問題に関するヘルプは大歓迎です!

PS私もこれをイテレータとして試しましたが、うまく動作しませんでした。結局のところ、それが最良の応答かもしれませんが、nav_items 配列サイクルを完了するために、colors 配列をループバックさせることができませんでした。

4

2 に答える 2

1
if (current($colors) === false) reset($colors);
于 2013-05-23T18:06:31.017 に答える
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++;
}

編集:申し訳ありませんが、配列のキーとしてCSSクラスとして使用したい色の名前があることに気づきませんでした...このように整理する必要がある場合は、次のようにすることができます:

$color_classes = array_keys($colors);

上記のスニペットで $colors の代わりに $color_classes を使用します。

于 2013-05-23T18:07:27.557 に答える