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);