2013-04-22 44 views
0

嗨,我正在尋找一個簡單的解決方案來隨機數的範圍洗牌,然後從範圍中取5個數字並放入一個滑塊。目前,我的代碼是這樣的,它結束的死循環:shuffle無限循環的隨機數

$slides = range(1,30); 
shuffle($slides); 
$count = 0; //infinite loop guard 
do{ 
    foreach ($slides as $slide) { 
    echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n"; 
    } 
} while ($count<5); 

有很多例子中的Javascript,但我不能複製,對於PHP。此代碼用於爲滑塊生成隨機圖像,但一次只能滑動5張幻燈片。共有30張圖片可供選擇。

+1

您從未增加'$ count'。 – 2013-04-22 10:45:20

+0

最後需要多少圖片?只有5或30?或者可能是150? – 2013-04-22 10:46:07

+0

圖片需要的也是一個變量,但是對於這個例子,5是好的 – 2013-04-23 02:11:09

回答

4

所以這裏的錯誤是你應該增加循環內的;如果沒有它,它的值將被固定爲0.此外,您正在迭代do {} while內的值的完整列表;也許這是有意的,但是鑑於你一次需要5張幻燈片,我懷疑這是否是正確的。

反而搬起石頭砸自己的腳用自己的循環,只是slice你需要什麼:

$slides = range(1,30); 
shuffle($slides); 
foreach (array_slice($slides, 0, 5) as $slide) { 
    echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n"; 
} 

array_slice()函數創建一個新的數組,從索引0(第一項)和長度5的開始。

+0

謝謝傑克。這是從我失敗的基本知識的結果:( – 2013-04-23 02:13:46

+0

@FadliSaad我不知道如果答案是正確的,但我很高興它幫助你:) – 2013-04-23 02:15:37

2

你在循環中不增加$count,所以它總是爲零。

+0

感謝RichieHindle! – 2013-04-23 02:15:25

1
$slides = range(1,30); 
shuffle($slides); 
$count = 0; //infinite loop guard 
do{ 
    foreach ($slides as $slide) { 
    $count++; 
    echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n"; 
    } 
} while ($count<5); 

很明顯,這是一個無限循環,因爲您不會增加$ count。做到這一點與$count++;

+0

謝謝Micheal以及 – 2013-04-23 02:15:43

1

增量$count,如:

foreach ($slides as $slide) { 
    echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n"; 
    $count++; 
} 
+0

Sudhir,你的解決方案也可以。顯然這是我的無知,導致增量被遺漏。 – 2013-04-23 02:17:33

3

當您使用的是增量計數器,它更容易使用的循環:

$slides = range(1,30); 
shuffle($slides); 
$count = 0; //infinite loop guard 
for ($count = 0 ; $count < 5 ; $count++){ 
    foreach ($slides as $slide) { 
     echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n"; 
    } 
} 
+0

非常感謝ibi0tux。您的解決方案符合原始代碼。獎勵! – 2013-04-23 02:14:46

1

嘗試:

$slides = range(1,30); 
shuffle($slides); 

for ($i = 0; $i < 5; $i++): ?> 
    <img src="images/slider_<?php echo $slides[$i]; ?>.jpg" alt="" /><br /> 
<?php endfor ?> 
+0

antony,你的解決方案是最優雅的! – 2013-04-23 02:16:15