对PHP数组进行随机播放,以使其原始位置不会保留任何值

时间:2013-11-02 21:19:24

标签: php arrays shuffle

我一直在寻找这个问题,但我找到的解决方案都没有找到我想要的。

说我有一系列名字:

$names = array('zack', 'tom', 'brad', 'tim');

我想将这些名称随机化,但没有一个名称可以最终处于与开始时相同的位置。

shuffle()函数似乎不这样做。

我尝试过以下可能不是最好的方法,但由于某些原因这不起作用?:

$names = array('zack', 'tom', 'brad', 'tim');
$names2 = array('zack', 'tom', 'brad', 'tim');

do {
  shuffle($names2);
} while($names === $names2);

我还需要将原始数组保持原始顺序,以便对数组进行混洗,然后将数据移位不是一个选项。

如何在没有剩余价值的原始位置实现洗牌?

1 个答案:

答案 0 :(得分:2)

这是我提出的一种蛮力方法..

它运行shuffle,直到两个数组不同 请注意,这并不理想,可能需要很长时间才能使用更大的数组:)

http://codepad.viper-7.com/c8EFOc

$names = array('zack', 'tom', 'brad', 'tim');
$names2 = $names;

while(count(array_intersect_assoc($names, $names2))) {
    shuffle($names2);
    var_dump('Array1:', $names);
    echo '<br/>';
    var_dump('Array2:', $names2);
    echo '<br/>';
}

echo 'Done!';

修改:同时查看Shuffling php array without same value before or afterShuffle list, ensuring that no item remains in same position