Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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中的随机洗牌?_Php_Random_Shuffle - Fatal编程技术网

php中的随机洗牌?

php中的随机洗牌?,php,random,shuffle,Php,Random,Shuffle,我在开彩票,让人们配对。所以我想要一种在数组中洗牌字符串的方法,在这个数组中,没有项目会出现在同一个地方。(你不能和自己配对) 如果您认为PHP中没有内置函数可以进行这种洗牌。您必须编写自己的函数。$src=$query->result(); $src = $query->result(); $givers = array(); $receivers = array(); foreach ($src as $idx=>$first_person){ $count = 0; /

我在开彩票,让人们配对。所以我想要一种在数组中洗牌字符串的方法,在这个数组中,没有项目会出现在同一个地方。(你不能和自己配对)


如果您认为PHP中没有内置函数可以进行这种洗牌。您必须编写自己的函数。

$src=$query->result();
$src = $query->result();
$givers = array();
$receivers = array();
foreach ($src as $idx=>$first_person){
    $count = 0; //infinite loop guard
    do{
        ++$count;
        $sec_idx = rand(0,count($src)-1);
        $second_person = $src[$sec_idx];
    } while ($second_person==$first_person && $count<5); 
    $givers[] = $first_person;
    $receivers[] = $second_person; 
}
$givers=array(); $receivers=array(); foreach($src作为$idx=>$first\u person){ $count=0;//无限循环保护 做{ ++$count; $sec_idx=rand(0,计数($src)-1); $second_person=$src[$sec_idx];
}而($second\u person==$first\u person&&$count)将数组洗牌一次,然后将第一个元素与第二个元素配对,第二个元素与第三个元素配对,等等。最后一个元素与第一个元素配对。

也许你可以让一个大数组进行洗牌()你可能想看看。当结果是奇数时会发生什么?我想你弄错了:每个人都是一个送礼者和一个接受者。使用你的函数,礼物的数量和人数一样多。如果人数是奇数,一个人就不会有任何礼物。@Clement更新了一点,总是混合这种情况在
do…while
循环中。@Vince完全重写了代码,现在它肯定能工作了。这种方法不能保证单个元素不会与自身配对。非常优雅的解决方案!(也进行了轻微编辑,以便能够向上投票,如@J0HN,我认为这是错误的)的确如此,但这个问题似乎太“请给我代码”我想提出一个更好的答案,不是吗?
$src = $query->result();
$givers = array();
$receivers = array();
foreach ($src as $idx=>$first_person){
    $count = 0; //infinite loop guard
    do{
        ++$count;
        $sec_idx = rand(0,count($src)-1);
        $second_person = $src[$sec_idx];
    } while ($second_person==$first_person && $count<5); 
    $givers[] = $first_person;
    $receivers[] = $second_person; 
}