【发布时间】:2010-10-15 20:11:26
【问题描述】:
我有一个包含 30 个值的数组,我需要从这个数组中提取 3 个不同的随机值。我该怎么做?
【问题讨论】:
我有一个包含 30 个值的数组,我需要从这个数组中提取 3 个不同的随机值。我该怎么做?
【问题讨论】:
我完全不知道为什么要使用array_rand(),因为它只是一个看似没有理由的额外函数调用。只需 shuffle() 并切片前三个元素:
shuffle($array);
print_r(array_slice($array, 0, 3));
【讨论】:
$array 很大,可能是这里的性能问题
array_slice() 在非常大的阵列上要慢得多。也就是说,即使有 1,000,000 个密钥,它也只用了 0.124 秒,而 array_rand() 只用了 0.004 秒。在大多数情况下,这无关紧要,但最好注意一下!
使用shuffle($array) 然后array_rand($array,3)
【讨论】:
shuffle有什么特别的原因吗?
无耻地从 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";
?>
请注意,从 PHP 5.2.10 开始,您可能需要随机化(随机化)通过 shuffle($rand_keys) 返回的键,否则它们将始终按顺序排列(最小索引优先)。也就是说,在上面的示例中,您可能会得到“Neo,Trinity”,但永远不会得到“Trinity,Neo”。
如果随机元素的顺序不重要,那么上面的代码就足够了。
【讨论】: