【问题标题】:Random number from shuffle infinite loop随机播放无限循环中的随机数
【发布时间】:2013-04-22 10:36:26
【问题描述】:

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

【问题讨论】:

  • 你从未增加过$count
  • 最后需要多少张图片?只有5个还是30个?或者可能是 150 个?
  • Images需要也是一个变量,但例如5就可以了

标签: php random shuffle


【解决方案1】:

所以这里的错误是你应该在循环内增加$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。

【讨论】:

  • 谢谢杰克。这是我基础知识失败的结果:(
  • @FadliSaad 我不确定答案是否正确,但很高兴它对您有所帮助:)
【解决方案2】:

当您使用增量计数器时,使用 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";
    }
}

【讨论】:

  • 也感谢 ibi0tux。您的解决方案符合原始代码。赞一个!
【解决方案3】:

您没有在循环中增加 $count,因此它始终为零。

【讨论】:

    【解决方案4】:
    $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++;做到这一点

    【讨论】:

      【解决方案5】:

      递增$count,如:

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

      【讨论】:

      • Sudhir,您的解决方案也有效。显然是我的无知导致增量被遗漏了。
      【解决方案6】:

      试试:

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

      【讨论】:

      • antony,你的解决方案是最优雅的!
      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多