2012-09-24 42 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,否則至少第一次迭代會給你一個錯誤的數字。

正如你所想象的那樣,有多種方式可以做到這一點,所以這只是一個例子。