PHP Multidimensional array doorzoeken
Ik heb een multidimensional array, die meerdere keren dezelfde values heeft.
Maar die values zitten op verschillende plekken in de array.
En aangezien de array ongeveer 310 keys heeft, heb ik een functie geprobeerd die dan zoekt door de multidimensional array en vervolgens de keys van alle values returned / weergeeft.
Functie:
(Ik ben al een tijd niet meer op deze website geweest, dus ik weet niet hoe ik de code goed kan laten weergeven op dit forum, dus sorry als het niet goed is weergegeven)
Code (php)
Deze functie die doet het deels.
Het probleem is alleen dat hij maar 1x zoekt naar de value. Als hij de value heeft gevonden, stopt de uitvoering ervan.
Dat heb ik dus opgelost door de functie een aantal keer uit te laten voeren met het aantal indexes (310)
Code (php)
Dus nu werd de functie uitgevoerd met het aantal keer van het aantal indexes.
Maar ik heb nu nog 1 probleem.
Als hij opnieuw wordt uitgevoerd, gaat hij weer bij het begin beginnen, waardoor je dus alleen de 1e key krijgt, maar dan 310 keer.
Ik weet niet hoe ik dit moet oplossen. Ik heb dit geprobeerd via in_array(), maar dat werkte niet.
Heeft iemand een oplossing?
Met vriendelijke groeten,
Regel 6 if($i++ < $maxi) Dus je slaat er een stel over.
Regel 11 $keydb[] = $key; $keydb bestaat niet.
Regel 12 return $keydb; Bij een return is het direct einde function. Hier krijg je dus het eerste antwoord en meer niet.
Regel 17 $maxi + 10; Doet niets.
- SanThe - op 29/08/2019 16:51:51:
Regel 5 $maxi = 7; Waarom staat dit in de foreach()?
Ik probeerde de loop een aantal rijen over te slaan, dus daarom.
- SanThe - op 29/08/2019 16:51:51:
Regel 6 if($i++ < $maxi) Dus je slaat er een stel over.
Dat is omdat de eerste 7 keys mogen worden overgeslagen.
- SanThe - op 29/08/2019 16:51:51:
Regel 11 $keydb[] = $key; $keydb bestaat niet.
Ik probeer de keys die waren gevonden op te slaan in de array $keydb. Zo kon ik later dus return $keydb; doen. En later probeerde ik dus gebaseerd daarop een in_array functie uit te voeren die dus zou kijken of de key al was gevonden. Maar ik weet niet hoe ik de loop die key dan weer laat overslaan, dus ik probeerde $i++ en $maxi + 10;. Maar dat werkte niet.
Ik heb zelf geprobeerd.
Nu heb ik nog 1 vraag. Zou je me willen uitleggen hoe deze code precies werkt en wat het verschil is met mijn code? (Dan leer ik er ook nog van)
Dus ook even $keydb bekend maken.
De foreach() is heel simpel:
De eerste ($maxi) aantal overslaan.
De rest indien de if() true geeft in $keydb zetten.
Na de loop kijken of er iets in $keydb zit.
Zo ja, $keydb retour geven anders null.
Bedankt voor je hulp!
Toevoeging op 29/08/2019 17:42:32:
Nog even een vraag:
Hoe selecteer ik meerdere indexes van deze output / array?
Dus bijvoorbeeld: ik moet index 1 - 10 selecteren.
Hoe doe ik dat?
Toevoeging op 29/08/2019 17:46:59:
Jin vanTongeren op 29/08/2019 17:37:35:
Ahh... Ik zie het.
Bedankt voor je hulp!
Toevoeging op 29/08/2019 17:42:32:
Nog even een vraag:
Hoe selecteer ik meerdere indexes van deze output / array?
Dus bijvoorbeeld: ik moet index 1 - 10 selecteren.
Hoe doe ik dat?
Bedankt voor je hulp!
Toevoeging op 29/08/2019 17:42:32:
Nog even een vraag:
Hoe selecteer ik meerdere indexes van deze output / array?
Dus bijvoorbeeld: ik moet index 1 - 10 selecteren.
Hoe doe ik dat?
Laat maar... Ik heb het al. (array_slice())
Het lijkt mij vooral zaak dat je de functionaliteit zo simpel mogelijk houdt, anders wordt het een hels karwei om over een tijd te achterhalen wat deze ook alweer deed of betekende. Ik zou je daarom ook zeker aanraden om code te annoteren, als leidraad voor de werking.
Ook uit oogpunt van herbruikbaarheid wil je iets generieks. Als je hier dan dingen als specifieke -hard coded- keys of startindexen in stopt dan holt het potentieel voor hergebruik snel achteruit.
Een vereenvoudigde variant, die op een specifieke (maar instelbare) key en waarde zoekt, en die alles retourneert, altijd als een array, want verschillende return-typen zou je anders ook verschillend moeten afhandelen wat de boel ook weer onnodig compliceert, wordt dan zoiets als:
Code (php)
Hierbij helpt het ook om variabelen zinvolle, zelfdocumenterende namen te geven.
Gewijzigd op 31/08/2019 14:47:28 door Thomas van den Heuvel