Door
Jac E
op 21-05-2016 18:48
gewijzigd op 21-05-2016 18:56
2.007 views
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
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:
<?php
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.
Voor mij is het denk ik ietsje duidelijker wat je probeert te bereiken.
Je zou deze query kunnen gebruiken:
SELECT * FROM groente order by groente_id WHERE groente_nummer=2 AND groente_kleur=2
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:
SELECT * FROM groente order by groente_id WHERE groente_nummer=2 AND groente_kleur=2 LIMIT 1
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):
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:
<?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;
}
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):