【问题标题】:Choose 3 different random values from an array从数组中选择 3 个不同的随机值
【发布时间】:2010-10-15 20:11:26
【问题描述】:

我有一个包含 30 个值的数组,我需要从这个数组中提取 3 个不同的随机值。我该怎么做?

【问题讨论】:

标签: php arrays random


【解决方案1】:

我完全不知道为什么要使用array_rand(),因为它只是一个看似没有理由的额外函数调用。只需 shuffle() 并切片前三个元素:

shuffle($array);
print_r(array_slice($array, 0, 3));

【讨论】:

  • 干净多了,这应该是一个可以接受的答案
  • 如果$array 很大,可能是这里的性能问题
  • @yunzen - 我针对接受的答案运行了一些基准测试,我同意array_slice() 在非常大的阵列上要慢得多。也就是说,即使有 1,000,000 个密钥,它也只用了 0.124 秒,而 array_rand() 只用了 0.004 秒。在大多数情况下,这无关紧要,但最好注意一下!
【解决方案2】:

使用shuffle($array) 然后array_rand($array,3)

【讨论】:

  • 你打电话给shuffle有什么特别的原因吗?
  • 只是为了确保它是真正随机的 :) .. 其背后的历史是去年使用 array_rand 我看到的结果不是那么随机(连续运行的类似项目),所以为了让它更随机,我会先对数组进行洗牌,然后将其提供给 array_rand 函数,它似乎给出了更多的随机值。
【解决方案3】:

无耻地从 PHP 手册中窃取:

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

http://us2.php.net/array_rand

请注意,从 PHP 5.2.10 开始,您可能需要随机化(随机化)通过 shuffle($rand_keys) 返回的键,否则它们将始终按顺序排列(最小索引优先)。也就是说,在上面的示例中,您可能会得到“Neo,Trinity”,但永远不会得到“Trinity,Neo”。

如果随机元素的顺序不重要,那么上面的代码就足够了。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多