我正在创建一个配对人的彩票。所以我想要一种方法来将数组中的字符串混洗,其中没有项目在同一个地方结束。 (你不能和自己配对)
public function shuffleSantas(){
$query = $this->db->get('person');
$givers = array();
$recievers = array();
foreach($query->result() as $row):
$givers[] = $row->name;
//here i want a random order, but no name can be on the same place as in $givers!
$recievers[] = '';
endforeach;
答案 0 :(得分:3)
将数组洗牌一次,然后将第一个元素与第二个元素配对,第二个元素与第三个元素配对,最后一个与第一个元素配对。
答案 1 :(得分:1)
$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;
}
在这种情况下,人们可以从一个人那里接收并给予他人。可以吗?此外,这个算法不是最优的,如果数组中只有一个人,它肯定会陷入无限循环。
答案 2 :(得分:-2)
如果认为PHP中没有内置函数可以以这种方式进行随机播放。你必须编写自己的函数。