用PHP实现数值数组的随机N排列
我发现这个函数的时候,我正在寻找最快的方法来找到所有可能的数字数组排列用PHP实现数值数组的随机N排列,php,arrays,math,permutation,numeric,Php,Arrays,Math,Permutation,Numeric,我发现这个函数的时候,我正在寻找最快的方法来找到所有可能的数字数组排列 private function permute(array $elements) { if (count($elements) <= 1) { yield $elements; } else { foreach ($this->permute(array_slice($elements, 1)) as $permutatio
private function permute(array $elements)
{
if (count($elements) <= 1) {
yield $elements;
} else {
foreach ($this->permute(array_slice($elements, 1)) as $permutation) {
foreach (range(0, count($elements) - 1) as $i) {
yield array_merge(
array_slice($permutation, 0, $i),
[$elements[0]],
array_slice($permutation, $i)
);
}
}
}
}
私有函数置换(数组$elements)
{
if(将($elements)置换(数组_切片($elements,1))计数为$permutation){
foreach(范围(0,计数($elements)-1)为$i){
产生数组合并(
数组_切片($permutation,0,$i),
[$elements[0]],
数组\u切片($permutation,$i)
);
}
}
}
}
我需要的是,对结果进行洗牌,得到一个数字数组的随机N排列
问题是,它返回object,并且不可能洗牌它的结果
有什么建议吗?
任何建议此方法返回的实例。这是可以预测的,因为它使用而不是
return
。您可以使用foreach
循环此对象,或者在您的情况下,可以使用获得整个排列数组(这是可能的,因为生成器实现了)
这是
你可以阅读
$permutations = iterator_to_array(permute($array));
shuffle($permutations);
$result = array_slice($permutations, 0, 3);