洗牌一个PHP数组,使其不留任何值';s的原始位置
我已经寻找了一段时间,但没有一个解决方案能满足我的需求 假设我有一个名称数组:洗牌一个PHP数组,使其不留任何值';s的原始位置,php,arrays,shuffle,Php,Arrays,Shuffle,我已经寻找了一段时间,但没有一个解决方案能满足我的需求 假设我有一个名称数组: $names = array('zack', 'tom', 'brad', 'tim'); 我想随机化这些名字,但没有一个能像它开始时那样以相同的位置结束 shuffle()函数似乎没有这样做 我尝试了以下方法,这可能不是最好的方法,但由于某些原因,这不起作用: $names = array('zack', 'tom', 'brad', 'tim'); $names2 = array('zack', 'tom',
$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移动
如何在原始位置上实现无值洗牌?这是我提出的蛮力方法 它运行shuffle,直到两个数组不同。
请注意,这并不理想,对于较大的阵列可能需要很长时间:)
$names=array('zack','tom','brad','tim');
$names2=$names;
而(计数(数组相交关联($names,$names2))){
洗牌(2美元);
变量转储('Array1:',$names);
回声“
”;
变量转储('Array2:',$names2);
回声“
”;
}
回音‘完成!’;
编辑:还可以查看和“我想随机分配这些名称,但没有一个名称可以在开始时的相同位置结束。”->在这种情况下,结果不是随机的,它受一条规则的限制。谢谢-数组将相对较小,因此此方法应该可以:)
$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!';