1

我一直在寻找这个,但我找到的解决方案都不匹配我正在寻找的。

假设我有一组名称:

$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);

我还需要将原始数组保持在原始顺序中,因此对数组进行洗牌然后按一个移动不是一种选择。

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

4

1 回答 1

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!';

编辑:也看看Shuffle php array without the same value before or after and Shuffle list,确保没有项目保持在相同的位置

于 2013-11-02T21:30:31.637 回答