php - 从 PHP 数组中高效地挑选 n 个随机元素(无随机播放)

标签 php arrays performance random shuffle

我有以下代码从 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/

相关文章:

javascript - Angular 2 对如此多的 javascript 文件的依赖是否会妨碍/影响其性能?

SQL Server - 条件语句的查询执行计划

php - 能够检查表格单元格是否不等于空,如果是则删除/隐藏单元格中的按钮

php - Paypal自适应支付使用curl

JavaScript。引用动态创建的变量

arrays - 寻找最小化数组其余部分的平均值的连续子序列?

php - Codeigniter:登录每个帐户后如何显示每个员工的详细信息?

php - 检测未选中的复选框php

python - 重新排序 numpy ndarray 的最后一个维度

java - Jdbc连接池和mysql线程池