在PHP中随机随机播放?

时间:2011-08-30 09:01:46

标签: php random shuffle

我正在创建一个配对人的彩票。所以我想要一种方法来将数组中的字符串混洗,其中没有项目在同一个地方结束。 (你不能和自己配对)

    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;

3 个答案:

答案 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中没有内置函数可以以这种方式进行随机播放。你必须编写自己的函数。