PHP彩票门票选手

Sør*_*Efa 7 php mysql

我即将创建一个脚本,为我的彩票选择一个赢家.门票的数量选择如下:amount of money * 100所以$ 1.26 = 126门票.

我做了这个,它给了我中奖的票号,但后来我无法得到获胜的用户:

$totaltickets = 0;

foreach($players as $player){

    $totaltickets += $player->depositedValue*100;
}

$winningTicket = rand(1,$totaltickets);
Run Code Online (Sandbox Code Playgroud)

我有这样的行:

Player1 - 1.25$
Player2 - 5.99$
etc..
Run Code Online (Sandbox Code Playgroud)

如果有可能那么我想保持这样,并且每个票证在数据库中没有1000行.

Dav*_*hen 2

我正在考虑保留你对数字的想法而不是引入数组。

我将让玩家保持他们的票位置(开始/结束)。当我随机挑选一张彩票时,我会看看我的号码是否在他们的范围内,如果是,那么我就找到了中奖者。

<?php

class TicketMaster {
    private $players = array();
    public $total = 0;

    public function addPlayer($player) {
        $player->tickets[0] = $this->total;
        $this->total += $player->value;
        $player->tickets[1] = $this->total;
        $this->players[] = $player;
    }

    public function selectWinner() {
        $ticket = rand(0, $this->total);

        foreach ($this->players as $player)
            if ($ticket >= $player->tickets[0] && $ticket <= $player->tickets[1])
                return $player;
        return false;
    }
}

class Player {
    public $name = '';
    public $value = 0;
    public $tickets = array(0, 0);

    function __construct($name, $value) {
        $this->name = $name;
        $this->value = $value;
    }
}

$ticketMaster = new TicketMaster();

$ticketMaster->addPlayer(new Player("John", 200));
$ticketMaster->addPlayer(new Player("Mike", 200));
$ticketMaster->addPlayer(new Player("Dave", 1000));

echo $ticketMaster->selectWinner()->name;
Run Code Online (Sandbox Code Playgroud)

$ticket = rand(0, $this->total); //change to random_int, but I kept it at rand because eval.in only works with this one
Run Code Online (Sandbox Code Playgroud)

输出Dave

Dave 大部分时间都获胜,因为他拥有大约 1000 张门票,而其他两名玩家总共只有 400 张门票。