2013-04-22 47 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