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;
}