2017-08-10 44 views
0

展望下面的功能:我想进行自定义阵列洗牌相对于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") 

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

回答

0

是的,这是可能的,它是如何发生的,它会落实到期望的实现以及您希望允许的排列次数。完成此操作的非常幼稚的方法是在CustomShuffle内运行$para次循环,该循环将array_shift()元素然后array_push()该相同元素。这种方法只会给你count($array)可能的结果,意味着模数count($array)将产生相同的结果。

最佳算法将允许您利用最大组合,这将是gmp_fact(count($array))或简单地说是输入数组长度的阶乘。没有办法实现比这个值更独特的组合,所以不管你设计什么算法,你总是会对$para的值产生限制,直到你最终遇到已经看到的组合。

+0

对不起,没有用。 –

+0

什么不起作用?我没有在这里包含任何代码来工作,只有引用。如果某些东西在你的代码中不起作用,你需要编辑你的问题来表达它。 – yanman1234

+0

我已经理解你的答案,并已尝试过类似的事情。 http://www.englishact.com/Permutation/index.php?permutation=notwork#result:在这里我尝试了排列这不是有效的方式来处理。这将使我的服务器对于较长的数组(超过1000个值)变慢。所以使用排列方法,这不会解决我的问题。其实我需要有效的方法,可以适用于现场项目。 –