Mit isset() auf einen Arrayindex prüfen
Nice to know | letzte Änderung am 03. Mai '10 um 18:09 Uhr
Anstelle von array_key_exists() wird gerne auf die Funktion isset() zur Prüfung eines Arrayindex' zurückgegriffen, da diese Funktion performanter ist.
Ein Problem, das in diesem Zusammenhang auftreten kann, entsteht z.B. bei folgendem Code:
<?php
$array = array('blub', 'foo' => 'bar', 'bla',);
if (isset($array['foo']['index'])) {
// do something
}
Die Bedingung ist erfüllt, was daran liegt, dass PHP Strings auf 0 castet. Außerdem kann jeder String, in diesem Fall ist es "bar", wie ein Array angesprochen werden:
<?php
$string = 'bar';
// gibt b aus
echo $string[0];
Der Index ist also gesetzt, wodurch die Bedingung wahr ist.
Ein weiterer Beweis: Führt man den Beispielcode stattdessen mit diesem Array aus
<?php
$array = array('blub', 'foo' => '', 'bla',);
kann der String als leeres Array angesehen werden und der Index 0 wäre dann nicht gesetzt. Die Bedingung ist in diesem Fall unwahr.
Daher ist es bei der Verwendung von isset() notwendig, dass zuvor mit is_array() auf ein Array geprüft wird oder man verwendet gleich array_key_exists(), wenn nicht davon ausgegangen werden kann, dass mit isset() immer auf ein Array getestet wird.
Weitere Informationen dazu gibt es auch im Handbuch: http://de2.php.net/manual/en/function.isset.php#89780.