我有一个包含3个条目的数组:
0 => "Banana",
1 => "Apple",
2 => "Strawberry"
现在,当使用for循环时:
for($i = 1; $i < $foo; $i++) {
$myarray[$i] = $fruitarray[$i];
}
并且$i
高于2,我们用尽$fruitarray
。所以我现在要做的就是在数组结束时始终从它开始。因此,3个输出&#34; Banana&#34;,7&#34; Apple&#34;等。
实现这一目标的最佳做法是什么(特别是如果$fruitarray
包含许多条目)?
答案 0 :(得分:6)
这通常使用模运算符完成。
for($i = 1; $i < $foo; $i++) {
$myarray[$i] = $fruitarray[$i % count($fruitarray)];
}
答案 1 :(得分:1)
for($i = 1; $i < $foo; $i++) {
$myarray[$i] = $fruitarray[$i%3];
}
注意$ i%3,这是发音&#34; i mod 3&#34;它意味着将我除以3,然后返回剩菜。因此,4%3 = 1,7%3 = 1,11%3 = 2等
确保$ foo超过3,这应该包围。如果$ fruitarray任意大于3项,请使用
$i%count($fruitarray)
答案 2 :(得分:1)
你应该使用模数运算符($ a的模数余数除以$ b)
for($i = 1; $i < $foo; $i++) {
$j=$i%count($fruitarray);
$myarray[$i] = $fruitarray[$j];
}
答案 3 :(得分:0)
一种可能的解决方案是检查$i
何时等于$foo - 1
并将其重置为1
:
for($i = 1; $i < $foo; $i++) {
$myarray[$i] = $fruitarray[$i];
if($i == ($foo - 1))
$i = 1;
}
答案 4 :(得分:0)
使用热切代码执行此操作基本上是难以处理的,因为它会导致无限循环:
$i = 0;
$numFruits = count($fruitarray);
while (true) { // infinite loop!
$myarray[$++i] = $fruitarray[$i % $numFruits];
}
但是,如果您使用函数来获取值,而不是数组,那么您可以提供工作代码:
function getFruitAt($index) use ($fruitarray) {
$numFruits = count($fruitarray);
$realIndex = $index % $numFruits;
return $fruitarray[$realIndex];
}