一尘不染

从PHP数组中有效地选择n个随机元素(无随机播放)

php

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

shuffle($array);
$result = array_splice($array, 0, $n);

给定一个大数组,但只有几个元素(例如5out 10000),这相对较慢,因此我想对其进行优化,以使并非所有元素都必须改组。这些值必须是唯一的。

我正在寻找性能最好的替代产品。我们可以假设它$array没有重复项并且被0索引了。


阅读 360

收藏
2020-05-29

共1个答案

一尘不染

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

这将提供5个元素,而且没有重复项,而且很快。密钥将被保留。

注意:您必须确保$ array包含5个或更多的元素,或者添加某种检查以防止无限循环。

2020-05-29