HalloPHP

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.

Antworten