Mailinglisten-Archive |
Maik Ryssel wrote: > Hallo, > > folgendes Problem, ich habe ein mehrdimensionales Array mit beliebiger > Verschachtelungstiefe. Ich möchte prüfen ob ein bestimmter Key > existiert. Mit array_key_exists() kann ich ja nur die erste Ebene des > Arrays prüfen. > > Meine Idee war nun eien rekursive Funktion zu schreiben. > > > <code> > $testarray = array( > 'key1' => 'test1' > ,'key2' => 'test2' > ,'key3' => array( > 'key4' => 'blafasel1' > ,'key1' => 'blafasel2' > ) > ,'key4' => 'test4' > ); > > function array_key_exists_recursive($key,$array) { > foreach($array as $k => $v) { > if($k == $key) {return $key;} > if(is_array($v)) { array_key_exists_recursive($key,$v); } > } > return false; > } > > var_dump(array_key_exists_recursive('key4',$testarray));} > > </code> > > Geht das auch eleganter zu lösen? Eleganter nicht, aber so, dass es funktioniert. Würde mich zumindest wundern, wenn deine Funktion funzt, weil das: if(is_array($v)) array_key_exists_recursive($key,$v); so... naja... du machst mit dem Ergebnis von der Funktion nie was... Richtig wäre sowas: if(is_array($v) && array_key_exists_recursive($key,$v)) return true; btw: warum returnst du den key, wenn du was gefunden hast: if($k == $key) {return $key;} Wenn dein key irgendwas ist, was sich nach false casten lässt, liegst du ganz schnell auf der Schnauze. Und den key, nachdem du suchst weisst du ja eh... returne doch true :-). > > Danke > > Gruß, Maik Yannik
php::bar PHP Wiki - Listenarchive