waardes van multidimensional array controleren en wijzigen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marios Achternaam

Marios Achternaam

08/07/2018 18:21:04
Quote Anchor link
Goedenavond,

Dit is voor de eerste keer dat ik me heb aangemeld op een form. Dus mocht er iets zijn wat ik ben vergeten hoor ik het graag.

Momenteel ben ik bezig met een opdracht voor de cursus PHP&MySQL echter ik kom niet verder. PHP is nieuwe voor mij en wil mij hierin verdiepen.

Nu mij vraag. Het is mij gelukt om een multidimensional array te maken, hierin zitten 6 arrays met 6 waardes. De waardes zijn cijfers die uniek moeten zijn. Soms is dat niet het geval. Nu heb ik geprobeerd om deze waardes met elkaar te vergelijken om zo te zien of het nummer voorkomt ja of nee. Komt deze voor moet hij veranderd worden naar een ander nummer.

Wie weet wat ik hiermee moet doen. Graag mij ook uitleggen wat ik fout doe, waar ik rekening mee moet houden en waarom het zo moet.

Code hieronder:

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
<?php
        mt_srand((double)microtime() * 1000000);
        
        function
gameBingo() {
            //array_bingo rijen maken
            $nummer = 012;
            for($i=1; $i<=6; $i++){
                for($j=1; $j<=6; $j++){
                    $bingo_kaart[$i][$j] = $i . rand(0,9);
                }
            }

            
            foreach($bingo_kaart as $rij => $nummer){
                foreach ($nummer as $getal){
                    if($getal == $getal){
                        $getal = "test";
                    }
                }
            }

            
            echo '<pre>', print_r($bingo_kaart, true), '</pre><br>';
            print gettype($bingo_kaart);
        }

        gameBingo()
        
        ?>



Alvast bedankt.

Groeten Mario
 
PHP hulp

PHP hulp

29/03/2024 05:44:40
 
Rob Doemaarwat

Rob Doemaarwat

08/07/2018 18:50:05
Quote Anchor link
Wat er fout gaat is dat je $getal == $getal controleert. Dit zal altijd waar zijn.

Wat je beter kunt doen is tijdens het vullen van de array al controleren of het getal al voorkomt. Voordat je het getal aan de array toevoegt (dus wel al random aanmaken) controleer je dan eerst met in_array() of deze waarde toevallig al voorkomt (op deze rij). Is dat het geval, dan probeer je het nogmaals (voor dezelfde index), met een nieuw random getal.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/07/2018 18:55:21
Quote Anchor link
Inderdaad, de beste manier om te voorkomen dat er getallen dubbel zijn is door in eerste instantie te vermijden dat je een dubbel getal toevoegt.
 
Marios Achternaam

Marios Achternaam

08/07/2018 22:21:30
Quote Anchor link
Zo dat is een snelle reactie. Top dank jullie wel. Ik ga kijken of ik hiermee uit de voeten kan.

Hebben jullie misschien ook wat tips. Ik vind het namelijk lastig om te bepalen wanneer ik welke functie moet gebruiken en op welke manier.
 
Rob Doemaarwat

Rob Doemaarwat

08/07/2018 22:31:03
Quote Anchor link
Voor het meeste wat je wilt bestaat al een functie (zeker voor het manipuleren van arrays). Bedenk dus hoe je het op zou willen lossen (nog niet in code, maar gewoon beschrijvend), en zoek dan op die "beschrijving" in Google (in het Engels, maar Nederlands lukt vaak ook nog wel). 9 v/d 10 keer vind je dan gewoon de functie die je nodig hebt.
 
Marios Achternaam

Marios Achternaam

09/07/2018 20:25:54
Quote Anchor link
Goedenavond,

Heb meerdere pogingen gedaan om de in_array werkend te maken. Maar het werkt nog steeds niet. Heb dezelfde for loop gebruikt om te testen en te kijken wat er gebeurt. Ik heb commentaar toegevoegd om te laten zien wat ik bedoel met de code en hoe ik het zie. Wie weet wat hier fout gaat en waarom en waar moet ik op letten.

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
<?php
            //array_bingo rijen maken
            for($i=1; $i<=6; $i++){
                for($j=1; $j<=6; $j++){
                    //maakt een getal die begint met [i] + een getal tussen 0,9
                    $nummer =  $i . rand(0,9);
                    //voeg een willekurig getal aan array=>array toe
                    $bingo_kaart[$i][$j] = $nummer;
                    //controleer array=>array=>element of het nummer aanwezig is
                    //ik moet hier toch de elementen aanwijzen van de ingebouwde arrays?

                    if(in_array($nummer, $bingo_kaart)){
                        //print als deze er in zit en voeg een ander nummer toe
                        print "Zit er in";
                        $bingo_kaart[$i][$j] = $nummer;
                    }
                }
            }

            
            //Zelfde for loop als hierboven met opmerking
            for($i=1; $i<=6; $i++){
                for($j=1; $j<=6; $j++){
                    $nummer =  $i . rand(0,9);
                    $bingo_kaart[$i][$j] = $nummer;
                    if(in_array($nummer, $bingo_kaart[i])){//als ik deze [i] en of [j] toevoeg krijg ik errors waarom is dit?
                        print "Zit er in";
                        $bingo_kaart[$i][$j] = $nummer;
                    }
                }
            }

?>


Alvast bedankt voor de info.

Groeten Mario
Gewijzigd op 09/07/2018 20:26:39 door Marios Achternaam
 
Rob Doemaarwat

Rob Doemaarwat

09/07/2018 20:45:22
Quote Anchor link
Nee ... eerst controleren of ie d'r al in zit, dan - indien niet - pas toevoegen. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
10 nummer genereren
20 controleren of nummer d'r al in zit - zo ja, goto 10
30 nummer toevoegen aan rij
 
Marios Achternaam

Marios Achternaam

09/07/2018 22:54:07
Quote Anchor link
Ik probeer dit met een multidimensional array. Maar wat ik op google vind is dat niet mogelijk. Alleen door een foreach loop of functie. Kan dat kloppen?

Excuus voor traag begrip. Ben zeer nieuw in php. Maar zeker bedankt voor het helpen.

Groeten Mario
 
Rob Doemaarwat

Rob Doemaarwat

09/07/2018 23:09:06
Quote Anchor link
Multidimensionaal is gewoon niet anders dan een "array in een array". Dat verschilt niet van een "gewone array".

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
<?php

//variabelen altijd initialiseren; zomaar "uit de lucht plukken" gaat
//je op een gegeven moment een keer bijten

$bingo_kaart = [];

for($i=1; $i<=6; $i++){
  $bingo_kaart[$i] = []; //de rij initialiseren  
  for($j=1; $j<=6; $j++){
    //nummer aanmaken, en meteen controleren of ie al in de rij zit
    //dit is dus een beetje aparte toepassing van while(), omdat er "niks achter komt"

    while(in_array($nummer =  $i . rand(0,9),$bingo_kaart[$i]));
    //als je dus hier komt, bent je uit de while() "ontsnapt", wat wil zeggen
    //dat het getal nog niet in de rij voorkwam

    //nu voeg je het getal pas toe!

    $bingo_kaart[$i][$j] = $nummer;
  }
}


print_r($bingo_kaart);

?>
 
Marios Achternaam

Marios Achternaam

11/07/2018 13:49:33
Quote Anchor link
Bedankt voor de uitleg. Ik wist niet dat een while-loop zo gebruikt kon worden. Ik dacht dat je bij een while-loop altijd een variabele moest initialiseren, controleren en dan verhogen of verlagen.
Nogmaals bedankt.

Gr Mario

Toevoeging op 11/07/2018 13:49:33:

Bedankt voor de uitleg. Ik wist niet dat een while-loop zo gebruikt kon worden. Ik dacht dat je bij een while-loop altijd een variabele moest initialiseren, controleren en dan verhogen of verlagen.
Nogmaals bedankt.

Gr Mario
 



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.