Prüfen, ob ein bestimmter Schlüssel eines Arrays definiert ist (Thema: PHP Beispiele)

Wie herausgefunden werden kann, ob in einem Array ein bestimmter Schlüssel existiert bzw. definiert ist (PHP)

Schnellübersicht
In einem Array $arr existiert ein Element mit Schlüssel $s und Wert ungleich NULL falls gilt isset($s). Sollen auch Elemente mit dem Wert NULL als existierend angesehen werden, ist auf array_key_exists($s, $arr) zurückzugreifen.

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-Code: Anwendung von isset() auf verschiedene Array-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
	);
?>

HTML-Code: Ausgabe
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-Code: empty() in Verbindung mit Array-Schlüsseln
<?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
	);
?>

HTML-Code: Ausgabe
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-Code: Mit array_key_exists() auf Schlüssel prüfen
<?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
	);
?>

HTML-Code: Ausgabe
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-Code: Mit in_array() und array_keys() prüfen, ob ein Schlüssel existiert
<?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
	);
?>

HTML-Code: Ausgabe
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-Code: Nutzen des dritten Parameters von in_array()
<?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
?>

HTML-Code: Ausgabe
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-Code: Mit einer foreach-Schleife nach einem Schlüssel suchen
<?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
	);
?>

HTML-Code: Ausgabe
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK