2012-09-24 25 views
5

我想从1循环,直到5,这很容易,如果你使用一个for循环:PHP:循环,从1日至5日出发的3

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

我怎样才能做到这一点?

非常感谢!

回答

1

试试这个:

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

需要两个瓦尔至做你想做的事。如果设置J = 3,它会做3 4 5 1 2

乐趣。

+0

它打印4 2,如果$ J = 3,我需要它来打印3 4 5 1 2 –

+0

我刚刚更新了我的回答“正确”的方式做到这一点,这应该工作现在。 – Weacked

+0

正在$ j = 3;它打印3 2这是伟大的原因,它由3开始,而不是1它显示6 –

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

这是硬编码,我的意思是3是一个随机数,下一个加载它可能是4或2或1或5 .. –

5

你想开始在某一随机点(偏移量),然后进行5个循环:

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

3是一个随机数,下一个加载它可能是4或2或1或5 –

+0

调整我的回答 – JvdBerg

+0

你的系列将会产生'3,4,0,1,2'。 – zzzzBov

2

好,$i1迭代,以5这意味着你可以做另一个变量$j等效于$i + 2,但当然会导致计数:

3, 4, 5, 6, 7 

这哪里是模运营商(%)到来时,模运算符的第二个数字给你的余数:

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

如果你所迭代E从15并添加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; 
} 
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,否则至少第一次迭代会给你一个错误的数字。

正如你所想象的那样,有多种方式可以做到这一点,所以这只是一个例子。