从PHP数组中有效地选择n个随机元素(不用shuffle)

Fab*_*ler 9 php arrays random performance shuffle

我有以下代码$n$arrayPHP中的数组中选择元素:

shuffle($array);
$result = array_splice($array, 0, $n);
Run Code Online (Sandbox Code Playgroud)

给定一个大数组但只有少数元素(例如5out 10000),这是相对较慢的,所以我想优化它,以便不是所有元素都必须被洗牌.值必须是唯一的.

我正在寻找最有效的替代方案.我们可以假设$array没有重复并且是0索引的.

Dev*_*von 8

$randomArray = [];
while (count($randomArray) < 5) {
  $randomKey = mt_rand(0, count($array)-1);
  $randomArray[$randomKey] = $array[$randomKey];
}
Run Code Online (Sandbox Code Playgroud)

这将提供5个元素,没有重复,非常快.密钥将被保留.

注意:您必须确保$ array有5个或更多元素或添加某种检查以防止无限循环.