2017-08-10 21 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個值)變慢。所以使用排列方法,這不會解決我的問題。其實我需要有效的方法,可以適用於現場項目。 –