我想从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循环,直到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
我怎样才能做到这一点?
非常感谢!
试试这个:
for ($i = 0, $j = 3; $i < 5; $i++)
{
echo $j;
$j %= 5;
$j++;
}
需要两个瓦尔至做你想做的事。如果设置J = 3,它会做3 4 5 1 2
乐趣。
$i = array(3,4,5,1,2); //considering you want to follow this order, and not random.
foreach($i as $v) {
//do something
}
这是硬编码,我的意思是3是一个随机数,下一个加载它可能是4或2或1或5 .. –
好,$i
将1
迭代,以5
这意味着你可以做另一个变量$j
等效于$i + 2
,但当然会导致计数:
3, 4, 5, 6, 7
这哪里是模运营商(%
)到来时,模运算符的第二个数字给你的余数:
3 % 5 //3
7 % 5 //2
如果你所迭代E从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;
}
一些(比我以前的)一步一步的例子:
所有你想拥有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 2,如果$ J = 3,我需要它来打印3 4 5 1 2 –
我刚刚更新了我的回答“正确”的方式做到这一点,这应该工作现在。 – Weacked
正在$ j = 3;它打印3 2这是伟大的原因,它由3开始,而不是1它显示6 –