检查数组并确定匹配的数字

时间:2013-04-25 13:20:37

标签: php arrays random

我正在使用刮刮卡游戏,用户从我/我的商店购买刮刮卡,然后可以通过刮掉数字并匹配3张图片来赢取奖品

就像物理刮刮卡一样,我想要预先配置奖品,以便我知道什么时候会赢得奖品,但显然用户不会,这样我就可以限制奖品,所以这不是真正的随机,而是在谁赢得奖品方面是随机的..

我知道如何设置奖品,但我需要检查数组中的每个数据值,以确保没有3个匹配的数字,除非它们实际赢了..

到目前为止,我已经有了这个(我会把它搞砸并尽快缩短代码)

$numbers = array(
    0 => rand(0,9),
    1 => rand(0,9),
    2 => rand(0,9),
    3 => rand(0,9),
    4 => rand(0,9),
    5 => rand(0,9),
    6 => rand(0,9),
    7 => rand(0,9),
    8 => rand(0,9)
    );

只是随机生成9个数字和

echo "<table>";
    $i=0;
    for($x=0;$x<3;$x++){
    echo "<tr>";
       for($y=0;$y<3;$y++){
           echo "<td>" . $numbers[$i] . "</td>";
           $i++;
       }
    echo "</tr>";
    }

将它们分类为3x3表

我知道有一个命令in_array()会对数组进行排序以查找某些值,但我不想运行无限循环检查每个值以查看是否得到匹配,因为它是劳动密集型的而且也会很混乱。

我正在寻找任何人可能拥有的建议,以便我可以对数组进行排序,看看是否存在任何3个数字,如果存在,并且他们不支持(即用户没有&#39) ; t实际上赢了一个奖项)然后应该换一个新号码。

所以,提前感谢您的帮助,我期待您的建议

** * * 编辑 * *

+更多信息

为了挑选获胜者,我将使用数据库查询,例如

$stock = $conn -> query("SELECT DISTINCT * FROM codes WHERE Available = 1 AND 0 = FLOOR(RAND()*Chance) ORDER BY RAND()");

每个代码都有一定的获胜机会,如果匹配则会显示,具体取决于所获得的代码将显示某个奖项

$stock = $conn -> query("SELECT DISTINCT * FROM codes WHERE Available = 1 AND Win = 1);

&#39;运&#39;将成为数据库中的一个表格,每当有人玩游戏时它会下降1

所以每个代码都会有Win表,当它命中1时它将在下一个游戏中弹出

这两种方式我可以想到这样做,我认为这将有效,两种方式大致允许我控制何时和如果有人获胜但第二种解决方案显然是更准确的方式

1 个答案:

答案 0 :(得分:2)

如果发生三重数字,如何不更改数字,但是防止三重数字发生。

function createScratchRange()
{
    $result = array();
    $options = array_merge(range(0,9), range(0,9));

    for ($i = 0; $i < 9; $i++)
    {
        $key =  array_rand($options, 1);
        $result[] = $options[$key];
        unset($options[$key]);
    }

    return $result;
}

您可能希望能够创建获胜者:

function createWinner()
{
    $winningNumber = rand(0,9);

    $result = array();
    $possibleNumbers = range(0,9);
    unset($possibleNumbers[$winningNumber]);
    $options = array_merge($possibleNumbers,$possibleNumbers);

    for ($i = 0; $i < 9; $i++)
    {
        $key =  array_rand($options, 1);
        $result[] = $options[$key];
        unset($options[$key]);
    }

    // looks random now.. but no winning numbers... Lets just stick them in there.
    $keys = array_rand($result, 3);
    foreach($keys as $key)
    {
        $result[$key] = $winningNumber;
    }

    return $result;
}

并进行测试:

var_dump(createScratchRange());  // this will never give 3 identical numbers in the array.
var_dump(createWinner());  // this will ALWAYS give 3 identical numbers, but never 2 sets of 3 identical numbers