【问题标题】:Is this a good "random page" PHP code?这是一个好的“随机页面”PHP代码吗?
【发布时间】:2016-04-22 19:39:52
【问题描述】:
<?php 
    $urls = array (
    "id=1.php",
    "id=2.php",
    "id=3.php" ); 
    $random = (rand()%3); 
    header ("Location: ".$urls[$random]);
    exit;
?>

我怀疑它可能会更好,尤其是因为每次添加新值时我都必须手动编辑 % 值。

【问题讨论】:

  • 你为什么不直接使用$random = mt_rand(0, count($urls) -1);
  • 嗨,我的建议是不要保留动态页面,因为用户在重定向特定 url 时会感到困惑。
  • @CharlotteDunois 不应该是$random = mt_rand(0, count($urls) - 1); 吗?
  • @Annshuk 嗯,上面的代码就是我的index.php。它应该将用户带到一个随机页面。
  • 我会试试的,Charlotte 和 Saqib

标签: php arrays url math random


【解决方案1】:

您可以使用array_rand() 函数来获取数组中的一个或多个随机键。

$random = $urls[array_rand($urls)];

mt_rand(0, count($urls) - 1);相比,语法显然更清晰,但随机性算法不太好。使用array_rand() 的一些很好的候选者是当您使用元素数量较少的数组时。当元素数量达到整数限制时似乎会出现问题,并且在 Windows 中会出现一些问题。此外,它不提供加密安全数字,这是一个非常具体的主题。就我个人而言,我在 非关键 上下文(例如测试)中多次使用此函数,没有遇到任何问题,但请注意,直到 PHP 将 mt_rand 算法用于 array_rand(),如 Bug #45301 Serious flaw in array_rand() 中所述。

【讨论】:

  • 这个和$random = mt_rand(0, count($urls) - 1);一样吗?
  • 更新了答案并与mt_rand(0, count($urls) - 1);进行了比较
  • 我对array_rand 和mt_rand 做了一些阅读,人们普遍认为array 会产生奇怪且不均匀的随机分布,并且与mt 一起使用。只是让你和任何阅读的人都知道。
  • 我也注意到了这一点,并在 PHP 上发现了与此相关的开放错误;添加了对问题的描述和我自己的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多