Hallo allemaal,
Ik ben bezig met een functie waarin ik wil controleren of uit een gegeven array een bepaalde key met bepaalde value aanwezig is. Dit omdat de in_array() functie tekort schiet omdat die functie volledige arrays met elkaar vergelijkt en mijn arrays binnen de globale array verschillen. Ook met de functie array_search kwam ik niet uit de voeten en ben ik aan de slag gegaan met een eigen functie. Naar eigen zeggen lekker compact, duidelijk en mogelijk interessant voor derden. Hieronder de functie met een voorbeeld:
Zoals je ziet maak ik gebruik recursie om geneste arrays binnen een array uit te filteren. Met bovenstaande testdata-array wordt, zoals verwacht, een match gevonden. Hetgeen waar het misgaat is de return bij een match. De regel 'return true' wordt genegeerd. Is er een regel binnen recursie dat de functie dan afdwingt dat eerst de volledige dataset wordt afgewerkt? Want dan is het logisch, maar hoe hou ik dan bij of er al een match gevonden is?
<?php
function array_search_key_value($needle, array $haystack, $searchKey)
{
foreach($haystack as $key => $value)
{
if(is_array($value))
array_search_key_value($needle, $haystack[$key], $searchKey);
else
if($key == $searchKey && $value == $needle)
return true;
}
}
$testdata = array(array("month" => "062009", "nogwat" => 0, "nogmeer" => "test"), array("month" => "072009"));
if(array_search_key_value("062009", $testdata, "month"))
echo "Match";
else
echo "Geen match";
?>
Het lijkt mij dat een return true de functie toch zou moeten afbreken en het resultaat (in dit geval: true) teruggeeft.
Iemand een idee?
932 views
knop om je tekst aan te passen.