2013-01-17 106 views
5

以相同方式重新排序陣列我正在運行測驗製作網站。我希望以洗牌順序向用戶顯示問題的答案。按照編號

我試圖避免存儲回答提交給用戶,如果我隨機洗牌的順序。

我想隨機打亂答案,,這樣我可以在後面以相同的方式重複洗牌(顯示結果時)。

我以爲我可以將答案列表中的某個數字(使用排序內的數字或者可以通過ID號碼識別多種類型的排序)這樣我就可以簡單地存儲數字他們被洗牌,並記得這個數字重新洗牌他們再次到相同的順序。

這是我到目前爲止的骨架,但我沒有任何邏輯把答案放回$ shuffled_array在洗牌順序

<?php 

function SortQuestions($answers, $sort_id) 
{ 
    // Blank array for newly shuffled answer order 
    $shuffled_answers = array(); 

    // Get the number of answers to sort 
    $answer_count = count($questions); 

    // Loop through each answer and put them into the array by the $sort_id 
    foreach ($answers AS $answer_id => $answer) 
    { 
     // Logic here for sorting answers, by the $sort_id 

     // Putting the result in to $shuffled_answers 
    } 

    // Return the shuffled answers 
    return $shuffled_answers; 
} 


// Define an array of answers and their ID numbers as the key 
$answers = array("1" => "A1", "2" => "A2", "3" => "A3", "4" => "A4", "5" => "A5"); 

// Do the sort by the number 5 
SortQuestions($answers, 5); 

?> 

是否有技術,我ca n用於通過傳遞給函數的數字來洗牌答案?

+0

會保留在隱藏的輸入元素內的答案順序被視爲「存儲」? :) –

回答

3

PHP的shuffle函數使用隨srand給出的隨機種子,因此您可以爲此設置特定的隨機種子。

而且,洗牌方法變化的數組鍵,但是這可能不是你最好的結局,所以您可以使用一個不同的隨機播放功能:

function shuffle_assoc(&$array, $random_seed) { 
    srand($random_seed); 

    $keys = array_keys($array); 

    shuffle($keys); 

    foreach($keys as $key) { 
     $new[$key] = $array[$key]; 
    } 

    $array = $new; 

    return true; 
} 

此功能將保持原來的鑰匙,但以不同的順序。

+0

不幸的是'srand'只能在每個PHP進程中運行一次。如果你用相同的種子調用這個函數兩次,你將得到不同的結果(即使你每次都會得到*相同的*不同的結果)。 – Jon

+0

@mistermartin:我的意思是後面的'srand'調用在第一個對PHP進程的持續時間沒有影響。不幸的是,我今天不能複製這個,我沒有提供任何參考,所以它看起來不準確。我明天將刪除這兩條評論。 – Jon

0

這可能是其中一種可能的方式。

$result = SortQuestions($answers, 30); 
print_r($result); 


function SortQuestions($answers, $num) 
{ 
$answers = range(1, $num); 
shuffle($answers); 
return $answers; 
} 
2

您可以通過一個因子旋轉數組。

$factor = 5; 
$numbers = array(1,2,3,4); 
for ($i = 0; $i < $factor; $i++) { 
    array_push($numbers, array_shift($numbers)); 
} 
print_r($numbers); 

該因子可以是隨機的,並且一個函數可以通過相反的旋轉將該數組切換回原處。

+0

謝謝你的回答。你定義了'$因子',並且不要在代碼中使用它:/ – Luke

+0

是的,當然,讓我編輯它! :) – Kao

+0

這很好,但我只是希望有一種方法可以使它更隨機一點?有任何想法嗎? :) – Luke