Fehlermeldung bei array_key_exists()

Sasser

Erfahrenes Mitglied
Guten Tag!

Ich nutze die Funktion array_key_exists() um ein Array zu überprüfen, ob dort ein bestimmter Schlüssel enthalten ist. Wenn nun das Array leer ist erhalte ich die folgende Warnung:

Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object

PHP:
$response = array ();
$response = products ();
if (array_key_exists ( "0", $response ["ProductSearchResult"] ["Products"] ["Product"] ) == false) {
		// Aktion ausführen
	}
 
Kommt aus der Funktion products() immer ein array zurück? Wenn du im 0-Fall ein NULL anstelle eines Arrays kommt, dann kommt dieser Fehler.

Man müsste also die Funktion products() genauer betrachten.
 
Manachmal eben existiert eben kein Array, aber ich initialisiere es doch trotzdem als ein Array mit:

PHP:
$response = array ();

Auch in der Funktion. Würde diese Fehlermeldung nicht mehr erscheinen, wenn ich vorher noch prüfe ob es ein Array ist?
 
du initialisierst es und überschreibst die Variable eine Zeile später bereits mit dem Funktionsresultat.
Das folgende muss ein array sein:
$response["ProductSearchResult"]["Products"]["Product"]
Denn darin suchst du nach dem Key 0
 
Demnach müsste ja dann folgendes in meiner Funktion das Problem beheben:

PHP:
if (is_array ( $response ["ProductSearchResult"] ["Products"] ["Product"] ) == true) {
		if (array_key_exists ( "0", $response ["ProductSearchResult"] ["Products"] ["Product"] ) == false) {
			$temp = $response ["ProductSearchResult"] ["Products"] ["Product"];
			unset ( $response ["ProductSearchResult"] ["Products"] ["Product"] );
			$response ["ProductSearchResult"] ["Products"] ["Product"] ["0"] = $temp;
		}
		return $response ["ProductSearchResult"] ["Products"] ["Product"];
	}

Ist eigentlich auch folgendes möglich?

PHP:
		if ((is_array ( $response ["ProductSearchResult"] ["Products"] ["Product"] ) == true)) && (array_key_exists ( "0", $response ["ProductSearchResult"] ["Products"] ["Product"] ) == false)) {
			$temp = $response ["ProductSearchResult"] ["Products"] ["Product"];
			unset ( $response ["ProductSearchResult"] ["Products"] ["Product"] );
			$response ["ProductSearchResult"] ["Products"] ["Product"] ["0"] = $temp;
		}
		return $response ["ProductSearchResult"] ["Products"] ["Product"];
 
Zuletzt bearbeitet:
1. (ohne lesen) - du hast den code doch schon, ist die frage dann nicht irgendwie überflüssig?

2. (mit lesen) - sieht für mich gleich aus.. wär einfacher wenn du den code auf das problem reduzierst und den überflüssigen Kram weg lässt :P
 
Da du so viele mal auv $response ["ProductSearchResult"] ["Products"] ["Product"] zugreiffst, solltest du diesen Teil am Anfang in eine Variable nehmen. Es vereinfacht den Code ungemein.
Und ich würde ev. nicht nach is_array die ganze Schliefe lösen, sondern es etwa so machen
PHP:
$product = $response["ProductSearchResult"]["Products"]["Product"];
if(!is_array($product)) $product= array();
if((!array_key_exists (0, product){
    //TODO dein COde
}
Bei Funktionen die True oder fals zurückgeben musst du nicht explizit mit == prüfen
 
Zurück