【问题标题】:Generating a random number without duplication issue生成没有重复问题的随机数
【发布时间】:2014-08-23 15:25:04
【问题描述】:

我知道在 SO 上有很多关于生成随机数的答案,但我在将它与我的网站集成时遇到了问题。

我正在使用 RANGE 生成一个随机数,然后 SHUFFLE。但我仍然得到重复的数字。

目标:生成一个介于 0-19 之间的数字。然后数字对应于正在显示的特定图形。

我的代码:

$numbers = range(0, 19);
  shuffle($numbers);

  print "<div id='commenter-picture'>";
  print "<img src='member_default_" . print_r($numbers[0]) . ".png' />";
  print "</div>";

更新:当用户匿名时,我在我的博客上将它用于 cmets。因此,我首先检查用户是否已登录,如果未登录,则我有此语句将缩略图分配给博客文章上的该评论。我不会在我的代码中多次重复这一点,而是 Drupal CMS 会在每次有新评论时检索此代码。

例如,当我在帖子上列出了 10 个 cmets 时,我会得到重复的缩略图。这就是我希望消除的。

【问题讨论】:

  • $numbers,在这种情况下,将始终是一个包含数字 0 到 19 的数组。shuffle() 只是将数组中已有的内容打乱;它确实添加任何新元素。因此生成的数组将永远包含重复项。我不确定你在问什么。
  • 可以用array_pop($numbers)代替$numbers[0],这样第一个数字就会从数组中移除,不再显示。
  • 谢谢大家,我更新了我的问题,因为我仍然收到重复的缩略图。我猜发生了什么是因为每次有评论时 CMS 都会生成此代码,所以必须不断地重复使用随机值?
  • 那么它不是随机的,你需要在数据库或某处跟踪每个数字的使用情况。仅给定 20 个选项,随机数每 10 次重复的机会非常好。

标签: php arrays random numbers shuffle


【解决方案1】:

取决于“获取重复数字”的含义。您在同一页面上多次执行此操作?尝试每次使用 array_pop()array_shift() 从数组中删除:

$numbers = range(0, 19);
shuffle($numbers);

print "<div id='commenter-picture'>";
print "<img src='member_default_" . echo array_pop($numbers) . ".png' />";
print "</div>";

print "<div id='commenter-picture'>";
print "<img src='member_default_" . echo array_pop($numbers) . ".png' />";
print "</div>";

// etc...

你可能想要循环:

$numbers = range(0, 19);
shuffle($numbers);

while($num = array_pop($numbers)) {
    print "<div id='commenter-picture'>";
    print "<img src='member_default_" . $num . ".png' />";
    print "</div>";
}

【讨论】:

  • 感谢您,我更新了我的问题,因为我仍然收到重复的缩略图。也许这是 CMS 的一个更大的问题?
  • 那么它不是随机的,你需要在数据库或某处跟踪每个数字的使用情况。仅给定 20 个选项,随机数每 10 次重复的机会非常好。
  • 知道了,谢谢。我会批准你的回答,因为它回答了我最初的问题。谢谢。
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多