array waarde echoën
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?
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
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:
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]);
?>
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.