我一直在寻找这个问题,但我找到的解决方案都没有找到我想要的。
说我有一系列名字:
$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);
我还需要将原始数组保持原始顺序,以便对数组进行混洗,然后将数据移位不是一个选项。
如何在没有剩余价值的原始位置实现洗牌?
答案 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 after和Shuffle list, ensuring that no item remains in same position