1. Prüfung mit isset()
Mittels isset() kann geprüft werden, ob eine Variable bereits definiert wurde.
<?php $a = 1000; $b = 0; var_dump( isset($a) ); // true var_dump( isset($b) ); // true var_dump( isset($ab) ); // false var_dump( isset($foo) ); // false ?>
bool(true) bool(true) bool(false) bool(false)
2. isset() auf Arrays angewandt
Häufig wird isset() auf Arrays angewendet, um zu prüfen, ob der Wert zu einem bestimmten Schlüssel existiert:
<?php $alter = array('peter'=>31, 'ralf'=>46, 'susie'=>25); if (isset($alter['tommy'])) { echo($alter['tommy']); } else { echo('Das Alter von Tommy ist unbekannt.'); } ?>
Das Alter von Tommy ist unbekannt.
Ein nützlicher Hinweis ist es dabei, dass mittels array_flip() die Schlüssel und Werte von Arrays vertauscht werden können, sodass array('peter'=>31) in array(31=>'peter') umgewandelt wird. So ist es auch mit isset() möglich zu prüfen, ob ein Wert in einem Array existiert (und nicht nur ob ein bestimmter Schlüssel vorhanden ist).
<?php // Freunde von Benutzer A, ID-Nummern $friendsA = array(19942, 42455, 1343, 19298); // Freunde von Benutzer B, ID-Nummern $friendsB = array(3456, 42455, 123, 98484); $friendsBf = array_flip($friendsB); foreach ($friendsA as $val) { if (isset($friendsBf[$val])) { echo('Der Freund mit ID '.$val.' ist beiden Nutzern zugeteilt.'); } } ?>
Der Freund mit ID 42455 ist beiden Nutzern zugeteilt.
3. empty() und Arrays
isset() hat einen Nachteil: Wenn einer Variablen der Wert NULL zugeordnet ist, dann gibt isset() immer false zurück, egal ob der Wert einer Variablen ($var) oder eines Array-Schlüssels ($var['key']) getestet wird. Umgangen werden kann dieses Problem indem !empty() statt isset() verwendet wird.
<?php $a = 1000; $b = null; $c = array('eins'=>1, 'zwei'=>null); var_dump( isset($a) ); // true var_dump( isset($b) ); // false var_dump( isset($existiertNicht) ); // false var_dump( isset($c['eins']) ); // true var_dump( isset($c['zwei']) ); // false var_dump( isset($c['existiertNicht']) ); // false echo("\n\n"); var_dump( !empty($a) ); // true var_dump( !empty($b) ); // false var_dump( !empty($existiertNicht) ); // false var_dump( !empty($c['eins']) ); // true var_dump( !empty($c['zwei']) ); // false var_dump( !empty($c['existiertNicht']) ); // false ?>
bool(true) bool(false) bool(false) bool(true) bool(false) bool(false) bool(true) bool(false) bool(false) bool(true) bool(false) bool(false)
4. isset() vs empty() vs array_key_exists() bei Arrays
Auch empty() ist nicht ohne Nachteile: Alle false-ähnlichen Werte werden als leer angesehen und empty() gibt daher für diese true zurück. Diese Werte sind im einzelnen: (bool)false, (int)0, (float)0.0, (string)"", (string)"0" und NULL. Um auch dieses Problem zu „umschiffen” kann die etwas unhandlichere Funktion array_key_exists() verwendet werden. Diese erwartet den Namen des zu prüfenden Schlüssels und das Array, das untersucht werden soll. Ist der Schlüssel in dem Array definiert — egal welcher Wert — wird true zurückgegeben, sonst false.
<?php $arr = array('eins'=>'test', 'zwei'=>null, 'drei'=>0); echo("isset:\n"); var_dump(isset($arr['eins'])); // true var_dump(isset($arr['zwei'])); // false var_dump(isset($arr['drei'])); // true var_dump(isset($arr['vier'])); // false echo("\nempty:\n"); var_dump(!empty($arr['eins'])); // true var_dump(!empty($arr['zwei'])); // false var_dump(!empty($arr['drei'])); // false var_dump(!empty($arr['vier'])); // false echo("\narray_key_exists:\n"); var_dump(array_key_exists('eins', $arr)); // true var_dump(array_key_exists('zwei', $arr)); // true var_dump(array_key_exists('drei', $arr)); // true var_dump(array_key_exists('vier', $arr)); // false ?>
isset: bool(true) bool(false) bool(true) bool(false) empty: bool(true) bool(false) bool(false) bool(false) array_key_exists: bool(true) bool(true) bool(true) bool(false)