phpbar.de logo

Mailinglisten-Archive

[php] Mehrdimensionales Array prüfen ob Key existiert

[php] Mehrdimensionales Array prüfen ob Key existiert

Yannik Hampe yannik at cipher-code.de
Die Jul 24 18:20:11 CEST 2007



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