来自shuffle无限循环的随机数

时间:2013-04-22 10:36:27

标签: php random shuffle

您好我正在寻找一个简单的解决方案来随机播放一系列随机数,然后从该范围中取5个数字并放入一个滑块。目前我的代码是这样的,它以无限循环结束:

$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张图片。

6 个答案:

答案 0 :(得分:4)

所以这里的错误是你应该在循环内增加$count;没有它,它的值被固定在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。

答案 1 :(得分: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";
    }
}

答案 2 :(得分:2)

你的循环中没有递增$count,所以它总是为零。

答案 3 :(得分: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++;

执行此操作

答案 4 :(得分:1)

增加$count,例如:

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

答案 5 :(得分: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 ?>