我有以下代码从 PHP 中的数组 $array
中选取 $n
元素:
shuffle($array);
$result = array_splice($array, 0, $n);
给定一个大数组但只有几个元素(例如 10000
中的 5
),这是相对较慢的,所以我想优化它,这样就不会所有元素都必须重新洗牌。这些值必须是唯一的。
我正在寻找性能最好的替代方案。我们可以假设 $array
没有重复项并且是 0
索引的。
最佳答案
$randomArray = [];
while (count($randomArray) < 5) {
$randomKey = mt_rand(0, count($array)-1);
$randomArray[$randomKey] = $array[$randomKey];
}
这将提供恰好 5 个元素,没有重复,而且速度非常快。 key 将被保留。
注意:您必须确保 $array 有 5 个或更多元素或添加某种检查以防止无限循环。
关于php - 从 PHP 数组中高效地挑选 n 个随机元素(无随机播放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035566/