如何使用random()函数在PHP中混洗数组

时间:2015-07-02 04:23:59

标签: php arrays random

在一次采访中,我被要求改组一个有价值的关联数组。

$card = array (
               "car"=>1,
                "bus"=>2,
                "truck"=>3,
);

等。 使用在0,1;

之间生成随机数的radom函数

他们让我不要使用任何内置的PHP函数。

input: associative array;
output: randomly sequenced associative array;

谢谢&此致

2 个答案:

答案 0 :(得分:2)

内置的shuffle()无法很好地处理关联数组,因此您需要对数组键进行随机播放,然后重新构建数组。

我使用Fisher-Yates-Knuth算法来执行改组,这实际上是解决方案的关键。

function myshuffle($arr)
{
    // extract the array keys
    $keys = [];
    foreach ($arr as $key => $value) {
        $keys[] = $key;
    }

    // shuffle the keys    
    for ($i = count($keys) - 1; $i >= 1; --$i) {
        $r = mt_rand(0, $i);
        if ($r != $i) {
            $tmp = $keys[$i];
            $keys[$i] = $keys[$r];
            $keys[$r] = $tmp;
        }
    }

    // reconstitute
    $result = [];
    foreach ($keys as $key) {
        $result[$key] = $arr[$key];
    }

    return $result;
}

答案 1 :(得分:-2)

    $words = array("adumbrate","antipathy","aspersion","assiduous","cacophony","conundrum");


 $rand_word_index = array_rand($words); // Get any random index from an array

        //  Original Word
 $rand_word = $words[$rand_word_index]; // Stored array value basis of random index


$shuffled = str_shuffle($rand_word); // Shuffle this value or word

echo $shuffled;