array waarde echoën
Ik krijg iets niet voor elkaar. Wie kan mij helpen?
Ik heb onderstaande array. Is het mogelijk dat ik de groente_omschrijving kan echoën (zonder "while loop") als ik alleen deze informatie heb: groente_nummer en groente_kleur?
Let op: groente_nummer kan soms gelijke waarden hebben. Bijvoorbeeld bij Appel.
Stel ik heb de waarde groente_nummer = 2 en groente_kleur = 2. Hoe kan ik de groente_omschrijving meteen echoën. In dit geval moet het antwoord zijn: Appel rood
Ik heb onderstaande array. Is het mogelijk dat ik de groente_omschrijving kan echoën (zonder "while loop") als ik alleen deze informatie heb: groente_nummer en groente_kleur?
Let op: groente_nummer kan soms gelijke waarden hebben. Bijvoorbeeld bij Appel.
Stel ik heb de waarde groente_nummer = 2 en groente_kleur = 2. Hoe kan ik de groente_omschrijving meteen echoën. In dit geval moet het antwoord zijn: Appel rood
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
31
32
33
34
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
[array_groente] => Array
(
[1] => Array
(
[groente_id] => 1
[groente_nummer] => 1
[groente_kleur] => 1
[groente_omschrijving] => Banaan
)
[2] => Array
(
[groente_id] => 2
[groente_nummer] => 2
[groente_kleur] => 1
[groente_omschrijving] => Appel groen
)
[3] => Array
(
[groente_id] => 3
[groente_nummer] => 2
[groente_kleur] => 2
[groente_omschrijving] => Appel rood
)
[4] => Array
(
[groente_id] => 4
[groente_nummer] => 3
[groente_kleur] => 1
[groente_omschrijving] => Peer
)
)
(
[1] => Array
(
[groente_id] => 1
[groente_nummer] => 1
[groente_kleur] => 1
[groente_omschrijving] => Banaan
)
[2] => Array
(
[groente_id] => 2
[groente_nummer] => 2
[groente_kleur] => 1
[groente_omschrijving] => Appel groen
)
[3] => Array
(
[groente_id] => 3
[groente_nummer] => 2
[groente_kleur] => 2
[groente_omschrijving] => Appel rood
)
[4] => Array
(
[groente_id] => 4
[groente_nummer] => 3
[groente_kleur] => 1
[groente_omschrijving] => Peer
)
)
Gewijzigd op 21/05/2016 18:56:27 door Jac E
Bedankt Frank voor je reactie. Helaas heb ik die waarde [3] niet. Alleen groente_nummer en groente_kleur. Daar moet ik het mee doen. Zijn er dan nog mogelijkheden?
In de huidige opzet kan dat niet. Waar komt de data vandaan? Als het uit de database komt kun je het gewoon in de query oplossen. Je kunt natuurlijk ook bij het vormen van de data een mapping maken, bijvoorbeeld als volgt:
Hierna kun je het array element eruit plukken met $groente_map[$nummer][$kleur].
Het is alleen een vreemde omweg.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
?>
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
?>
Hierna kun je het array element eruit plukken met $groente_map[$nummer][$kleur].
Het is alleen een vreemde omweg.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$resultaat_query = mysqli_query($con, "SELECT * FROM groente order by groente_id");
while ($groente_omschrijving = mysqli_fetch_assoc($resultaat_query)) {
$array_groente[$groente_omschrijving['groente_id']] = $groente_omschrijving;
}
[1] => Array
(
[groente_id] => 1
[groente_nummer] => 1
[groente_kleur] => 1
[groente_omschrijving] => Tomaat
)
while ($groente_omschrijving = mysqli_fetch_assoc($resultaat_query)) {
$array_groente[$groente_omschrijving['groente_id']] = $groente_omschrijving;
}
[1] => Array
(
[groente_id] => 1
[groente_nummer] => 1
[groente_kleur] => 1
[groente_omschrijving] => Tomaat
)
E.e.a. komt inderdaad uit de database. Misschien toch handiger dan als het via een betere query gaat.
Ik weet alleen niet hoe.
Gewijzigd op 22/05/2016 00:56:50 door Jac E
Voor mij is het denk ik ietsje duidelijker wat je probeert te bereiken.
Je zou deze query kunnen gebruiken:
Je moet er echter wel rekening mee houden dat deze query nog steeds meer dan 1 rij terug zou kunnen geven. Ook kan het zijn dat er helemaal geen rij gevonden wordt die aan de opgegeven criteria voldoet. Wil je uitsluiten dat er meer dan één rij teruggegeven wordt dan kun je LIMIT 1 aan de query toevoegen:
Je zou deze query kunnen gebruiken:
Je moet er echter wel rekening mee houden dat deze query nog steeds meer dan 1 rij terug zou kunnen geven. Ook kan het zijn dat er helemaal geen rij gevonden wordt die aan de opgegeven criteria voldoet. Wil je uitsluiten dat er meer dan één rij teruggegeven wordt dan kun je LIMIT 1 aan de query toevoegen:
Het werkt Frank. Bedankt. Het enige nadeel is eventueel dat ik nu per regel in een overzicht de hele database moet doorlopen. Vandaar dat ik dacht of het niet zo gemaakt kan worden dat je vooraf een "lijstje" maakt waar er steeds naar gekeken wordt wat de groente_omschrijving is als ik de waarde groente_nummer en groente_kleur doorgeef.
Dus ben ik ook wel benieuwd hoe de oplossing van Ben werkt. Bij mij doet hij het niet helaas. Wat doe ik verkeerd?
Ik heb even een test opstelling gemaakt wat ik nu heb (hij zou dus "Appel rood" moeten geven):
Dus ben ik ook wel benieuwd hoe de oplossing van Ben werkt. Bij mij doet hij het niet helaas. Wat doe ik verkeerd?
Ik heb even een test opstelling gemaakt wat ik nu heb (hij zou dus "Appel rood" moeten geven):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
$nummer = 2;
$kleur = 2;
echo $groente_map[$nummer][$kleur];
?>
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
$nummer = 2;
$kleur = 2;
echo $groente_map[$nummer][$kleur];
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
$nummer = 2;
$kleur = 2;
var_dump($groente_map[$nummer][$kleur][0]);
?>
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']][] = $groente;
}
$nummer = 2;
$kleur = 2;
var_dump($groente_map[$nummer][$kleur][0]);
?>
Zoals je ziet bevat de mapping de array als inhoud, welke je kunt benaderen. Ook is het in de huidige opzet zo, dat je element 0 nog even moet toevoegen. Dat is een provisie voor als er meerdere items zijn met hetzelfde nummer en kleur. Als je zeker weet dat dat niet kan gebeuren kun je de laatste [] binnen de foreach weghalen, zoals dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']] = $groente;
}
$nummer = 2;
$kleur = 2;
var_dump($groente_map[$nummer][$kleur]);
?>
$array_groente = Array (
1 => Array ('groente_id' => 1, 'groente_nummer' => '1', 'groente_kleur' => '1', 'groente_omschrijving' => 'Banaan'),
2 => Array ('groente_id' => 2, 'groente_nummer' => '2', 'groente_kleur' => '1', 'groente_omschrijving' => 'Appel groen'),
3 => Array ('groente_id' => 3, 'groente_nummer' => '2', 'groente_kleur' => '2', 'groente_omschrijving' => 'Appel rood'),
4 => Array ('groente_id' => 4, 'groente_nummer' => '3', 'groente_kleur' => '1', 'groente_omschrijving' => 'Peer'),
);
foreach ($array_groente as $groente) {
$groente_map[$groente['groente_nummer']][$groente['groente_kleur']] = $groente;
}
$nummer = 2;
$kleur = 2;
var_dump($groente_map[$nummer][$kleur]);
?>
Dit werkt heel goed Ben! Duidelijk. Bedankt. Alleen probeer ik die 'Appel rood' alleen eruit te krijgen uit die array. Het lukt niet met (ik krijg dan de tekst 'Array' te zien):
Het is een array in een array, en je moet hem dus ook als zodanig behandelen.
Inderdaad... Het werkt nu. Super bedankt Ben. En Frank natuurlijk ook.




