waardes van multidimensional array controleren en wijzigen
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)
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
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()
?>
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
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.
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.
Hebben jullie misschien ook wat tips. Ik vind het namelijk lastig om te bepalen wanneer ik welke functie moet gebruiken en op welke manier.
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.
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)
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
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;
}
}
}
?>
//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
Excuus voor traag begrip. Ben zeer nieuw in php. Maar zeker bedankt voor het helpen.
Groeten Mario
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
?>
//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);
?>
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