【发布时间】: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