Php 宾果卡多维数组在最后一列给出未定义的偏移量

Php 宾果卡多维数组在最后一列给出未定义的偏移量,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,我有一张6x6宾果卡,它是用10到70之间的随机数生成的。第7行和第7列用于计算卡上的已提取号码。当一行或一列达到6时,就有宾果了 我得到的最终结果是正确的,但在实现这一目标的过程中,有些事情出了问题 在我的函数generateCard中,我为卡片创建数字的行和列。我认为问题在于这个功能 function generateCard() { $card = array(); for ($row = 1; $row < 8; ++$row) { $card

我有一张6x6宾果卡,它是用10到70之间的随机数生成的。第7行和第7列用于计算卡上的已提取号码。当一行或一列达到6时,就有宾果了

我得到的最终结果是正确的,但在实现这一目标的过程中,有些事情出了问题

在我的函数generateCard中,我为卡片创建数字的行和列。我认为问题在于这个功能

function generateCard()
{

$card = array();

    for ($row = 1; $row < 8; ++$row)
    {

        $card[$row] = array();

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

        for ($kolom = 1; $kolom < 8; ++$kolom) {

            $index = mt_rand(0,count($deck) - 1);
            $number = $deck[$index];
            $card[$row][] = $row . $number;
            unset($deck[$index]);
            $deck = array_values($deck);

        }
        //Test
        printCard($card);

        // 7th column
        $card[$row][7] = 0;
    }
    //Test
    printCard($card);

    // 7th row
    for ($kolom = 1; $kolom < 7; ++$kolom){
        $card[7][$kolom] = 0;
    }

//Test
printCard($card);
return $card;
}
函数generateCard()
{
$card=array();
对于($row=1;$row<8;++$row)
{
$card[$row]=array();
$deck=阵列(0,1,2,3,4,5,6,7,8,9);
对于($kolom=1;$kolom<8;++$kolom){
$index=mt_rand(0,计数($deck)-1);
$number=$deck[$index];
$card[$row][]=$row.$number;
未结算($deck[$index]);
$deck=数组_值($deck);
}
//试验
印刷卡($卡);
//第七栏
$card[$row][7]=0;
}
//试验
印刷卡($卡);
//第七排
对于($kolom=1;$kolom<7;++$kolom){
$card[7][$kolom]=0;
}
//试验
印刷卡($卡);
退回$card;
}
我已经加入了一些打印卡函数来测试结果

创建第7列的第一个测试给了我大量未定义的offset 7通知。我想这是因为该列不存在,但当我尝试早些时候创建该列时,仍然会收到通知

第7行上面的第二个测试显示第7行(应该是0)被数字填充。这将在使用0值后被覆盖。我想我可以通过将$row<7和$kolom<7来解决这个问题,但是当我这样做的时候,卡根本不会正确打印

我想知道为什么我会收到关于最后一列的所有这些未定义的偏移量通知(即使在我之前创建它的时候),为什么我不能在generate card的for循环中使用$row<7和$column<7来避免用值填充最后一行和最后一列(7x7)。在宾果游戏开始之前,这些值应该是0

你有什么建议吗

我想我忽略了这里的一些东西。。 我将把完整的代码放在这里:

mt_srand((double)microtime()*1000000);

function generateCard()
{

$card = array();

for ($row = 1; $row < 8; ++$row)
{

    $card[$row] = array();

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

    for ($kolom = 1; $kolom < 8; ++$kolom) {

        $index = mt_rand(0,count($deck) - 1);
        $number = $deck[$index];
        $card[$row][] = $row . $number;
        unset($deck[$index]);
        $deck = array_values($deck);

    }
    //Test
    printCard($card);

    // 7th column
    $card[$row][7] = 0;
}
//Test
printCard($card);

// 7th row
for ($kolom = 1; $kolom < 7; ++$kolom){
    $card[7][$kolom] = 0;
}

//Test
printCard($card);
return $card;
}


function printCard($card){ ?>
<table border="1" cellspacing="0" cellpadding="5">
    <?php for($rij = 1; $rij < 8; $rij++) { ?>
        <tr> 
            <?php for ($kolom = 1; $kolom < 8; $kolom++) { ?>
                <td<?php if (($card[$rij][7] == 6) || ($card[7][$kolom] == 6)) {  echo ' style="background-color:green"'; } ?>><?php echo $card[$rij][$kolom]; ?></td> 
            <?php } 
            } ?>
        </tr>
</table>
<?php }

$card = generateCard();

$getrokkenGetallen = array();

$deck = range(10,69);

$bingo = false;

while (!$bingo){

$index = mt_rand(0,count($deck) - 1);

$number = $deck[$index];


if(!in_array($number, $getrokkenGetallen)){

    unset($deck[$index]);

    $deck = array_values($deck);

    $getrokkenGetallen[] = $number;

    for ($row = 1; $row < 7; $row++) {
        for ($kolom = 1; $kolom < 7; $kolom++) {           
            if ($card[$row][$kolom] == $number) {

                $card[$row][7] += 1;
                $card[7][$kolom] += 1;

                if(($card[$row][7] == 6) || ($card[7][$kolom] == 6)){
                        $bingo = true;
                }
                break; 
            }  
        }
    }
}
}

echo '<h2>Bingokaart waarop BINGO is gevallen</h2>';

printCard($card);

echo '<p><strong>Getrokken getallen:</strong><br>';
foreach($getrokkenGetallen as $value)
{
    echo $value . ' ';
}
echo '</p>';


echo '<p><strong>Aantal getallen dat is getrokken:</strong> ';
echo count($getrokkenGetallen);
echo '</p>';
mt_srand((双)微时间()*1000000);
函数generateCard()
{
$card=array();
对于($row=1;$row<8;++$row)
{
$card[$row]=array();
$deck=阵列(0,1,2,3,4,5,6,7,8,9);
对于($kolom=1;$kolom<8;++$kolom){
$index=mt_rand(0,计数($deck)-1);
$number=$deck[$index];
$card[$row][]=$row.$number;
未结算($deck[$index]);
$deck=数组_值($deck);
}
//试验
印刷卡($卡);
//第七栏
$card[$row][7]=0;
}
//试验
印刷卡($卡);
//第七排
对于($kolom=1;$kolom<7;++$kolom){
$card[7][$kolom]=0;
}
//试验
印刷卡($卡);
退回$card;
}
功能打印卡($card){?>

我不确定您的错误来自何处,我也不是一个普通的PHP用户,但是如果我将
generateCard
函数更改为以下内容:

function generateCard(){

  $card = array();

  for ($row = 1; $row < 8; ++$row){

    $card[$row] = array();
    $deck = range($row*10, $row*10+9);
    shuffle($deck);
    for($col = 1; $col < 8; ++$col){
      if($row == 7 OR $col == 7){
        $card[$row][$col] = 0;
      }else{
        $card[$row][$col] = $deck[$col];
      }
    }
  }

  //Test
  printCard($card);
  return $card;
}
函数generateCard(){
$card=array();
对于($row=1;$row<8;++$row){
$card[$row]=array();
$deck=范围($row*10,$row*10+9);
洗牌($牌组);
对于($col=1;$col<8;++$col){
如果($row==7或$col==7){
$card[$row][$col]=0;
}否则{
$card[$row][$col]=$CACK[$col];
}
}
}
//试验
印刷卡($卡);
退回$card;
}

这一切都如预期的那样工作。我想这比你要走的路线要简单一些。

你的宾果卡行中总是包含十次幂的数字,而不仅仅是一组随机数字,这有什么原因吗?我意识到这对数字的分布没有多大影响,只是美观而已。是的,每一行都有从10-19、20-29等等开始,它有自己的数字范围。这是我需要的结果的一部分,但它也保持了良好的组织性。