我想在php中针对整数进行自定义数组shuffle

时间:2017-08-10 13:45:03

标签: php

查看以下功能:

function CustomShuffle($arr, $para){
............................
............................
return $array;
}

假设这是一个数组:

$array = array("red","green","blue","yellow","purple");

查看类似下面的输出(可能是不同的有序但对于相同的整数参数必须相同)

$result = CustomShuffle($array, 10);  
// output: array("blue","purple","yellow","red","green")  same

$result = CustomShuffle($array, 12);  
// output: array("purple","yellow","red","green","blue")

$result = CustomShuffle($array, 10);  
// output: array("blue","purple","yellow","red","green") same


$result = CustomShuffle($array, 7);  
// output: array("blue","yellow","purple","red","green")

简单地说,数组将相对于整数参数进行混洗,但对于相同的参数,输出将是相同的。有可能吗?

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,它是如何发生的,取决于期望的实现以及您希望允许的排列数量。实现这一目标的一种非常天真的方法是在$para内运行CustomShuffle次循环,使array_shift()元素array_push()相同的元素https://github.com/elmah/Elmah/issues/407。这种方法只会给你count($array)个可能的结果,这意味着全等模count($array)的数字会产生相同的结果。

最佳算法允许您利用最大组合,即gmp_fact(count($array)),或者只是输入数组长度的阶乘。没有办法实现比这个值更多的独特组合,所以无论你设计什么算法,你都会对$para的值有一个约束,直到你最终遇到已经看到过的组合。