Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
洗牌一个PHP数组,使其不留任何值';s的原始位置_Php_Arrays_Shuffle - Fatal编程技术网

洗牌一个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!';