1. isset()
isset() ist ein spezielles Sprachkonstrukt (keine Funktion!) mit dem überprüft werden kann, ob eine Variable definiert ist. Auch eine Anwendung auf den Schlüssel eines Arrays ist möglich, um herauszufinden, ob ein Element mit dem angegebenen Schlüssel existiert. Die Syntax lautet dann isset($array[schlüssel]), wobei „schlüssel” entsprechend durch den gewünschten Integer oder String ersetzt werden muss. (Auch die Verwendung einer weiteren Variablen für „schlüssel” ist möglich.) Falls der Wert das Elements mit Schlüssel „schlüssel” NULL ist, gibt isset() false zurück, da Variablen mit dem Wert NULL in PHP als nicht definiert gelten. (Auch wenn sie tatsächlich im aktuellen Geltungsbereich vorhanden sind.)
Das nächste Beispiel zeigt die Anwendung von isset() auf mehrere verschiedene mögliche Elemente.
<?php $arr = array(0=>'test', 1=>'test', ''=>'test', 'foo'=>'test', 'null'=>null, 'false'=>false, 'empty'=>''); var_dump( // definierte Werte isset($arr[0]), // true isset($arr[1]), // true isset($arr['']), // true isset($arr['foo']), // true isset($arr['null']), // false ! isset($arr['false']), // true isset($arr['empty']), // true // tatsächlich nicht definierte Werte isset($arr[-1]), // false isset($arr['??']), // false isset($arr['bla']) // false ); ?>
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true) bool(true) bool(false) bool(false) bool(false)
2. empty()
Identisch zu isset() kann empty() auf einen Array-Schlüssel angewendet werden. Einziger Unterschied zu isset() ist hier, dass das Ergebnis negiert werden muss (!empty() statt empty()), da empty() true ergibt, wenn eine Variable leer ist.
<?php $arr = array(0=>'test', 1=>'test', ''=>'test', 'foo'=>'test', 'null'=>null, 'false'=>false, 'empty'=>''); var_dump( // definierte Werte !empty($arr[0]), // true !empty($arr[1]), // true !empty($arr['']), // true !empty($arr['foo']), // true !empty($arr['null']), // false ! !empty($arr['false']), // true !empty($arr['!empty']), // true // tatsächlich nicht definierte Werte !empty($arr[-1]), // false !empty($arr['??']), // false !empty($arr['bla']) // false ); ?>
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true) bool(true) bool(false) bool(false) bool(false)
3. array_key_exists()
Die gängige Alternative zu isset() ist array_key_exists($s, $arr), welche ein Array $arr darauf überprüft, ob ein Schlüssel $s definiert ist. Alle Rückgaben von array_key_exists() sind identisch mit isset() — mit der einzigen Ausnahme, dass diese Funktion ein Element mit dem Wert NULL als definiert anerkennt und true zurückgibt. Im nächsten Beispiel wird array_key_exists() auf das selbe Array wie zuvor isset() angewendet. Entsprechend gibt es nur einen Unterschied in der Ausgabe beim Wert NULL.
<?php $arr = array(0=>'test', 1=>'test', ''=>'test', 'foo'=>'test', 'null'=>null, 'false'=>false, 'empty'=>''); var_dump( // definierte Werte array_key_exists(0, $arr), // true array_key_exists(1, $arr), // true array_key_exists('', $arr), // true array_key_exists('foo', $arr), // true array_key_exists('null', $arr), // true ! isset() gibt hier false zurück array_key_exists('false', $arr), // true array_key_exists('empty', $arr), // true // tatsächlich nicht definierte Werte array_key_exists(-1, $arr), // false array_key_exists('??', $arr), // false array_key_exists('bla', $arr) // false ); ?>
bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(false) bool(false) bool(false)
4. array_keys() und in_array()
Das selbe Ergebnis wie bei array_key_exists() kann erreicht werden, wenn array_keys() mit in_array() kombiniert wird. array_keys($array) gibt alle Schlüssel des Arrays $array wiederum als Array zurück (die Schlüssel sind dann die Werte des neuen Arrays). in_array($wert, $array, true) durchläuft das Array $array und schaut, ob dieses den Wert $wert enthält. Der dritte Parameter gibt an, dass die Prüfung strikt sein soll (unterschiedliche Datentypen werden also nie als gleich angesehen). Über array_keys() werden nun die Schlüssel als Array ausgelesen und über in_array() wird geprüft, ob dieses Schlüssel-Array einen bestimmten Schlüssel enthält.
<?php $arr = array(0=>'test', 1=>'test', ''=>'test', 'foo'=>'test', 'null'=>null, 'false'=>false, 'empty'=>''); $keys = array_keys($arr); var_dump( in_array(0, $keys, true), // true in_array(1, $keys, true), // true in_array('', $keys, true), // true in_array('foo', $keys, true), // true in_array('null', $keys, true), // true in_array('false', $keys, true), // true in_array('empty', $keys, true), // true in_array(-1, $keys, true), // false in_array('??', $keys, true), // false in_array('bla', $keys, true) // false ); ?>
bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(false) bool(false) bool(false)
Der dritte Parameter von in_array() sollte immer auf true gesetzt werden, sonst rennt man schnell in folgendes Problem:
<?php $arr = array(0=>'test'); $keys = array_keys($arr); var_dump(in_array('Beispiel', $keys, false)); // true // denn: var_dump('Beispiel' == 0); // true (!!), da "Beispiel" in einen Integer konvertiert wird, der dann 0 ist ?>
bool(true) bool(true)
5. Eigene Funktion mit foreach
Es folgt nun noch ein kleines Beispiel in dem eine eigene Funktion implementiert wird, welche zurückgibt, ob ein bestimmer Schlüssel im Array existiert. Die Funktion verwendet eine foreach-Schleife. Diese iteriert über alle Elemente im Array $arr und prüft jeweils, ob der Schlüssel des Arrays mit einem bestimmten gesuchten String übereinstimmt. Falls ja, wird true zurückgegeben. Sonst läuft die Funktion bis zum Ende durch und gibt dann false zurück. (Es ist wohl unnötig zu erklären, dass die Performance von dieser Konstruktion deutlich schlechter ist als die von isset() oder array_key_exists().)
<?php function hasKey($arr, $search) { foreach ($arr as $key=>$val) { if ($key === $search) { return true; } } return false; } $arr = array(0=>'test', 1=>'test', ''=>'test', 'foo'=>'test', 'null'=>null, 'false'=>false, 'empty'=>''); $keys = array_keys($arr); var_dump( hasKey($arr, 0), // true hasKey($arr, 1), // true hasKey($arr, ''), // true hasKey($arr, 'foo'), // true hasKey($arr, 'null'), // true hasKey($arr, 'false'), // true hasKey($arr, 'empty'), // true hasKey($arr, -1), // false hasKey($arr, '??'), // false hasKey($arr, 'bla') // false ); ?>
bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(false) bool(false) bool(false)