PHP:从3开始循环,从3开始循环

时间:2012-09-24 13:44:00

标签: php loops random for-loop

我想从1到5循环。如果使用for循环,这很容易:

for ($i=1; $i<=5; $i++)
{
 // do something
}

但是想象一下,不是从$ i = 1开始,我有一个从1到5的随机起始编号,这次它的值是3.所以我必须从3开始循环,循环序列应该是:3,4, 5,1,2

我已经有了拉姆数,让我们说它是3,然后我需要3 4 5 1 2 ..如果它是5,我将需要5 1 2 3 4

我该怎么做?

非常感谢!

5 个答案:

答案 0 :(得分:5)

您想从某个随机点(偏移量)开始,然后进行5:

的循环
$offset = rand(1,5);
for ($i=1; $i<=5; $i++)
{
  echo (($i + $offset ) % 5) + 1;
}

答案 1 :(得分:2)

好吧,$i将从1迭代到5,这意味着您可以创建另一个等同于$j的变量$i + 2,但当然它会导致计数:

3, 4, 5, 6, 7

模数运算符(%)所在的位置,模数运算符在除以第二个数后给出余数:

3 % 5 //3
7 % 5 //2

如果您从1迭代到5并添加2(3-7),并取结果mod(5),您就会得到:

等式:

$j = ($i + 2) % 5

3, 4, 0, 1, 2

这接近你想要的,但并不完全。因此,最初不是添加2,而是最初添加1,然后在模数结果后再次添加:

$j = $i;
$j += 1;
$j %= 5;
$j += 1;
//or in one line:
$j = (($i + 1) % 5) + 1;

这将为您提供一系列3, 4, 5, 1, 2

要使用随机偏移,只需确保初始填充在一组5个连续正整数中随机化:

//this could be rand(0, 4) or rand(101, 105)
//it doesn't actually matter which range of 5 integers
//as the modulus operator will bound the results to the range of 0-4
$offset = rand(1, 5);
for ($i = 1; $i <= 5; $i++) {
    $j = (($i + $offset) % 5) + 1;
}

答案 2 :(得分:1)

试试这个:

for ($i = 0, $j = 3; $i < 5; $i++)
{
   echo $j;
   $j %= 5;
   $j++;
}

你需要两个vars来做你想做的事。如果设置J = 3,它将执行3 4 5 1 2

玩得开心。

答案 3 :(得分:1)

一些(比我之前的更好)一步一步的例子:

首先,你想拥有5个数字,这就是你进行循环的原因。这可以写成0到4的计数器:

for ($i = 0; $i < 5; $i++) { ...

然后指定起始值。如果将它放入变量并将其与计数器变量一起增加,则允许您从1到5计数:

for ($i = 0, $j = 1; $i < 5; $i++, $j++) { ...
             ^^^^^^                ^^^^

此处$i是计数器,$j包含您要查找的值。

如本例所示,确定要执行的步骤数的逻辑已与增加循环变量分开。

现在你需要添加一个检查$j是否高于5,如果是,它应该重置为1.但是,一个很好的方法是使用模运算符。这意味着,在增加$j之前,它将被设置为自身的余数除以5.这是PHP中的模运算,%运算符:

for ($i = 0, $j = 3; $i < 5; $i++, $j %= 5, $j++) { ...
                                   ^^^^^^^

现在你的for循环正在创建值。

在此示例中,您可以将3替换为随机起始编号。注意它大于0且小于6,否则至少第一次迭代会给你一个错误的数字。

你可以想象有多种方法可以做到这一点,所以这只是一个例子。

答案 4 :(得分:0)

 $i = array(3,4,5,1,2); //considering you want to follow this order, and not random.
 foreach($i as $v) {
 //do something
 }