用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);