PHP数组 - 如果结束则从头开始

时间:2014-07-28 15:07:19

标签: php arrays

我有一个包含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包含许多条目)?

5 个答案:

答案 0 :(得分:6)

这通常使用模运算符完成。

for($i = 1; $i < $foo; $i++) {
    $myarray[$i] = $fruitarray[$i % count($fruitarray)];
}

http://php.net/manual/en/language.operators.arithmetic.php

答案 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];
}

http://php.net/manual/en/language.operators.arithmetic.php

答案 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];
}

或者,如果您想获得幻想,可以使用generator或定义自己的Iterator类型。