我想从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
我该怎么做?
非常感谢!
答案 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
}