检查数组并识别匹配的数字


Check through an array and identify matching numbers

我正在制作一个刮刮卡游戏,用户从我/我的商店购买刮刮卡,然后可以通过刮掉数字和匹配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个数字存在,如果他们做,他们不应该(即用户没有实际赢得奖品),然后一个应该改变为一个新的数字。

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

《路加福音》

* * * * 编辑 * *

+更多信息

选择获胜者,我将使用如下的数据库查询

$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);

'Win'将是数据库中的一个表,每次有人玩游戏它都会下降1

每个代码都有一个表格Win当它点击1时它会弹出下一个游戏

这是我能想到的两种方法,我认为这两种方法都可以让我控制何时以及是否有人获胜但第二种方法显然是一种更准确的方法

如果出现了三个1,那么不改变一个数字,但是防止三个1的发生。

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