6

我正在运行一个测验制作网站。我希望以随机顺序向用户显示问题的答案。

如果我要随机打乱它们,我会尽量避免存储向用户提供答案的顺序。

我想以可预测的方式随机播放答案,以便以后可以以相同的方式重复随机播放(显示结果时)。

我认为我可以将答案列表改组为某个数字(使用排序中的数字,或者具有可通过 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);

?>

有没有我可以使用传递给函数的数字来随机播放答案的技术?

4

3 回答 3

3

PHP 的shuffle函数使用srand给出的随机种子,因此您可以为此设置特定的随机种子。

此外,shuffle 方法更改了数组键,但这对您来说可能不是最好的结果,因此您可以使用不同的 shuffle 函数:

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;
}

此功能将保留原始密钥,但顺序不同。

于 2013-01-17T09:50:23.913 回答
2

您可以将数组旋转一个因子。

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

该因子可以是随机的,并且一个函数可以通过相反的方式将数组切换回原位。

于 2013-01-17T09:51:07.113 回答
0

这可能是一种可能的方式。

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


function SortQuestions($answers, $num)
{
$answers = range(1, $num);
shuffle($answers);
return $answers;
}
于 2013-01-17T09:50:24.820 回答