以宾果的方式随机填充二维数组

Ric*_*lev 7 php

我有这两个功能:

function drawNumber($drawnNumbers){
  $unique = true;

  while ($unique == true){
      $number = mt_rand(10, 69);
      if (!in_array($number, $drawnNumbers)){
        return $number;
        $unique = false;
      }
  }
}

 fillCard();  ?>
Run Code Online (Sandbox Code Playgroud)

这是一个宾果游戏.该卡充满了随机数字.但我不能这样:

column column column column column column
row 10     13     16     14     16     19
row 24     26     28     29     23     21
row 36     33     39     30     31     35
row 46     48     42     45     43     47
row 59     56     51     52     58     50
row 60     65     68     62     61     67
Run Code Online (Sandbox Code Playgroud)

所以我希望第一行的数字从10到19,第二行从20到29,依此类推.

我试过这样的

<?php drawnNumber():    $number = mt_rand(0,9);
fillArray():  $number = $row . $number; ?>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为卡中有两个数字.

所以在此之前我用in_array以不同的方式尝试了它:

<?php 
function fillCard(){
      $card = array();

    /* fill card with random numbers */
    for($i = 0, $min = 10, $max = 19; $i < 6; $i++, $min+=10, $max += 10)
    {
        for($j = 0; $j < 6; $j++)
        {
        $number =  mt_rand($min,$max) ;
    if(!in_array($number, $card){
            $card['row' . $i]['column' . $j]['number'] = $number;
            $card['row' . $i]['column' . $j]['found'] = 0;
        }
        }
    }
var_dump($card);
return $card;
}  ?>
Run Code Online (Sandbox Code Playgroud)

但卡片中仍然有两个随机数字.在过去的两周里,我尝试了其他一些想法,但我无法让它一起工作.如果一件事成功,另一件事就会失败.

我可以得到随机数,但卡中没有唯一的随机数.我希望有一个人可以帮助我.(有关额外信息:它是一个宾果游戏.所以drawnNumber()是"球",它被绘制并存储在数组$ drawnNumbers中,它们也是唯一的随机数.fillCard()是填充宾果卡和检查$ drawNumber是否在$ card中)

如果有人能告诉我如何让它发挥作用,我将不胜感激.也许以算法的方式或者一些代码?先感谢您.

And*_*ius 2

一般来说,你是从某种盒子里画画的,对吧?所以做同样的事情,有一个包含所有可用数字的数组,一旦你从中得到一个随机数,就将其删除,这样下次你搜索一个数字时,你只会从剩余的数字中进行选择。小例子:

a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
Run Code Online (Sandbox Code Playgroud)

我们选择一个 0 到 3 之间的随机数(0 和 3 length - 1a。假设我们选择索引 2,那么 a 将如下所示:

a[0] = 1
a[1] = 2
a[2] = 4
Run Code Online (Sandbox Code Playgroud)

现在,如果您抽取 0 到 2 之间的数字(请注意,您使用的是length - 1a),您将不会以任何方式重新选择已经选择的数字,从而始终为您提供唯一的数字。

PS这是一个简化版本,但现在如果您可以将其应用到自己身上,并以您的示例为例,创建多个您可以从中选择的数组。