我想從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 –