0

嗨,我正在寻找一个简单的解决方案来对一系列随机数进行洗牌,然后从该范围内取出 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 张图片可用。

4

6 回答 6

4

所以这里的错误是你应该$count在循环内递增;没有它,它的值会停留在 0。此外,您正在遍历 ; 中的完整值列表do {} while。也许这是有意的,但考虑到您一次需要 5 张幻灯片,我怀疑这是否正确。

与其用自己的循环打自己的脚,不如下你需要的东西:

$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。

于 2013-04-22T10:40:58.553 回答
3

当您使用增量计数器时,使用 for 循环更容易:

$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";
    }
}
于 2013-04-22T10:39:44.237 回答
2

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

于 2013-04-22T10:37:32.643 回答
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++;

于 2013-04-22T10:38:18.067 回答
1

增量$count,例如:

foreach ($slides as $slide) {
  echo "<img src=\"images/slider_".$slide.".jpg\" alt=\"\" />\n";
  $count++;
}
于 2013-04-22T10:38:49.617 回答
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 ?>
于 2013-04-22T10:40:10.550 回答