我想从 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:
$offset = rand(1,5);
for ($i=1; $i<=5; $i++)
{
echo (($i + $offset ) % 5) + 1;
}
好吧,将$i
迭代 from这意味着您可以创建另一个等效于的变量,但当然它会导致以下计数:1
5
$j
$i + 2
3, 4, 5, 6, 7
这就是模运算符 ( %
) 的用武之地,模运算符为您提供除以第二个数字后的余数:
3 % 5 //3
7 % 5 //2
如果您从1
to迭代5
并添加 2 ( 3-7
),并获取 result 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;
}
试试这个 :
for ($i = 0, $j = 3; $i < 5; $i++)
{
echo $j;
$j %= 5;
$j++;
}
你需要两个变量来做你想做的事。如果你设置 J = 3,它会做 3 4 5 1 2
玩得开心。
一些(比我以前更好的)分步示例:
首先,您希望有 5 个数字,这就是您进行循环的原因。这可以写成从 0 到 4 的计数器:
for ($i = 0; $i < 5; $i++) { ...
然后你指定你的起始值。如果将其放入变量中并与计数器变量一起增加,则可以从 1 计数到 5:
for ($i = 0, $j = 1; $i < 5; $i++, $j++) { ...
^^^^^^ ^^^^
这$i
是计数器,$j
包含您要查找的值。
如本例所示,确定要执行的步骤数的逻辑已与增加循环变量分开。
现在您需要添加检查是否$j
高于 5,如果高于 5,则应将其重置为 1。但是,一个很好的方法是使用模运算符。这意味着,在增加 之前$j
,它将被设置为自身除以 5 的余数。这就是%
PHP 中的模运算,运算符:
for ($i = 0, $j = 3; $i < 5; $i++, $j %= 5, $j++) { ...
^^^^^^^
现在你已经有了for
创造价值的循环。
在此示例中,您可以将 替换为3
您的随机起始编号。注意它大于 0 且小于 6,否则至少第一次迭代会给你一个错误的数字。
您可以想象有多种方法可以做到这一点,所以这只是一个例子。
$i = array(3,4,5,1,2); //considering you want to follow this order, and not random.
foreach($i as $v) {
//do something
}