Bingo kaart multidimensionale array geeft undefined offset in laatste kolom

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ted Manders

Ted Manders

12/03/2015 12:23:16
Quote Anchor link
Ik heb een 6x6 bingo kaart die wordt gegenereerd met random nummers tussen 10 en 70. De 7de rij en 7de kolom worden gebruikt om de getrokken getallen die op de kaart staan op te tellen. Zodra een rij of kolom 6 bereikt is er bingo.

Het uiteindelijke resultaat dat ik krijg klopt, maar in het proces daarnaartoe gaan er een aantal dingen mis.

In mijn functie generateCard maak ik rijen en kolommen met nummers voor de bingo kaart. Ik denk dat het probleem in deze functie zit.

generateCard:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
    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;
    }

    ?>


Ik heb een aantal printCard functies erin geplaatst om de output te testen.

De eerste test net boven het maken van de 7de kolom geeft een berg undefined offset 7 notices. I denk dat dit komt omdat de kolom daar nog niet bestaat, maar wanneer ik deze eerder probeer aan te maken krijg ik nog steeds de notices.

De tweede test boven de 7de rij laat zien dat de 7de rij (die allemaal 0 zouden moeten zijn) gevuld wordt met nummers. Dit wordt daarna overschreven met 0 waardes. Ik dacht dat ik dit kon oplossen door $row < 7 en $kolom < 7 in de for loops te veranderen, maar als ik dat doe worden de kaarten helemaal niet meer geprint.

Ik snap op dit punt niet waarom ik al deze undefined offset notices over de laatste kolom ontvang, ook al maak ik deze eerder aan en waarom ik niet $row < 7 en $kolom < 7 in de for loops van generateCard kan gebruiken om te voorkomen dat de 7de rij wordt gevuld met nummers. Deze 7e rij zou 0 waardes moeten bevatten.

Heeft iemand suggesties hoe ik deze undefined offset op kan lossen en hoe ik kan zorgen dat de 7e rij niet wordt gevuld met nummers, maar met 0 waardes?

Ik ga misschien ergens te kort door de bocht, maar ik kan op dit punt geen oplossing verzinnen.
Het volledig script zal ik hieronder posten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
    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">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php for($rij = 1; $rij < 8; $rij++) { ?>

<tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php for ($kolom = 1; $kolom < 8; $kolom++) { ?>

<td
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if (($card[$rij][7] == 6) || ($card[7][$kolom] == 6)) {  echo ' style="background-color:green"'; } ?>
>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $card[$rij][$kolom]; ?>
</td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php }
            }
?>

</tr>
</table>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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>';
    ?>


Bedankt alvast voor hulp en suggesties.
Gewijzigd op 12/03/2015 12:27:36 door Ted Manders
 
PHP hulp

PHP hulp

16/01/2025 13:08:05
 
- SanThe -

- SanThe -

12/03/2015 15:10:26
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
mt_srand((double)microtime()*1000000);

function
generateCard()
{

    $card = newCard();
    for ($row = 1; $row < 7; ++$row)
    {

        $deck = array(0,1,2,3,4,5,6,7,8,9);
        for ($kolom = 1; $kolom < 7; ++$kolom)
        {

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

        
        //Test
        printCard($card);
    }

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

function
printCard($card)
{

    echo '<table border="1" cellspacing="0" cellpadding="5">';
    for($rij = 1; $rij < 8; $rij++)
    {

        echo '<tr> ';
        for ($kolom = 1; $kolom < 8; $kolom++)
        {

            if (($card[$rij][7] == 6) || ($card[7][$kolom] == 6))
            {

                echo '<td style="background-color:green">';
            }

            else
            {
                echo '<td>';
            }

            echo $card[$rij][$kolom];
            echo '</td>';
        }

        echo '</tr>';
    }

    echo '</table>';
}

function
newCard()
{

    return array(1=>newCardRow(),newCardRow(),newCardRow(),newCardRow(),newCardRow(),newCardRow(),newCardRow());
}

function
newCardRow()
{

    return array(1=>0,0,0,0,0,0,0);
}


$card = generateCard();
$getrokkenGetallen = array();
$deck = range(10,69);
$bingo = false;

while (!$bingo)
{

    $index = mt_rand(0,count($deck) - 1);
    $number = $deck[$index];
    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>';
?>
Gewijzigd op 12/03/2015 15:13:41 door - SanThe -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.