Prüfen ob ein Wert in einem Array enthalten ist (Thema: PHP Beispiele)

Verschiedene Techniken um zu ermitteln, ob ein bestimmter Wert Teil eines vorgegebenen Arrays ist oder nicht.

1. Eindimensionales Array


Mit in_array($needle, $haystack, $strict) kann geprüft werden, ob $needle im Array $haystack enthalten ist.
$strict gibt an, ob auch der Datentyp beachtet werden soll.
Ist $strict auf (bool)true gestellt, dann sind zum Beispiel (int)0 und (bool)false etwas unterschiedliches.
Standardmäßig ist $strict auf (bool)false gestellt, in der Regel ist (bool)true aber zu bevorzugen.
PHP-Code
<?php
	$arr = array('januar', 'februar', 'märz', 'april');

	var_dump(in_array('januar', $arr, true));
	var_dump(in_array('april', $arr, true));
	var_dump(in_array('April', $arr, true)); // ergibt false, da die Prüfung Groß- und Kleinschreibung beachtet wird!
	var_dump(in_array('november', $arr, true));
?>
Ausgabe
bool(true)
bool(true)
bool(false)
bool(false)

1.1. Keine Beachtung der Groß- und Kleinschreibung (Case-Insensitive)


Falls für einen Fall wie oben die Prüfung nicht case-sensitive sein soll (falls also Groß- und Kleinschreibung nicht beachtet werden soll), kann eine einfache foreach-Schleife verwendet werden:
PHP-Code
<?php
	$arr = array('januar', 'februar', 'märz', 'april');
	$needle = mb_strtolower('Januar');
	foreach ($arr as $val) {
		if (strtolower($val) === $needle) {
			echo("gefunden!");
			break;
		}
	}
?>
Ausgabe
gefunden!

1.2. Prüfen, ob ein Schlüssel vorhanden ist


Falls geprüft werden soll, ob nicht ein Wert sondern stattdessen ein bestimmter Schlüssel im Array existiert (z. B. ob $arr['morgen'] definiert ist), kann isset() verwendet werden.
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'keineZahl'=>'foo');
	var_dump(isset($arr['keineZahl']));
	var_dump(isset($arr[0])); // ergibt true, da 'eins' automatisch dem Schlüssel 0 zugeordnet wird
	var_dump(isset($arr[100]));
	var_dump(isset($arr['foo']));
?>
Ausgabe
bool(true)
bool(true)
bool(false)
bool(false)

1.3. Schnellere Prüfung auf Werte


Falls das mit in_array() zu durchsuchende Array sehr groß ist und insbesondere sehr oft (100 mal und häufiger) nach Werten darin gesucht werden soll, dann empfiehlt es sich, array_flip() und isset() zu verwenden, da diese für große Arrays wesentlich schneller sind.
array_flip() vertauscht Werte und Schlüssel miteinander, sodass aus dem Beispielarray $arr vom Anfang, welches array('januar', 'februar', 'märz', 'april') lautete nun array('januar'=>0, 'februar'=>1, 'märz'=>2, 'april'=>3) wird.
PHP-Code
<?php
	$arr = array('januar', 'februar', 'märz', 'april');
	$arr2 = array_flip($arr);
	var_dump($arr2);
	var_dump(isset($arr2['januar']));
	var_dump(isset($arr2['november']));
?>
Ausgabe
array(4) {
  ["januar"]=>
  int(0)
  ["februar"]=>
  int(1)
  ["märz"]=>
  int(2)
  ["april"]=>
  int(3)
}
bool(true)
bool(false)

1.4. Auch die Position eines Wertes im Array ermitteln


Um nicht nur zu ermitteln, ob ein Wert in einem Array enthalten ist, sondern auch welchen Schlüssel er hat kann array_search($needle, $haystack, $strict) verwendet werden.
Es wird wieder nach $needle in $haystack gesucht und $strict sollte in der Regel auf true gestellt sein.
PHP-Code
<?php
	$arr = array('januar', 'februar', 'märz', 'april');
	$pos = array_search('april', $arr, true);

	// Abfrage: Wurde "april" im Array gefunden?
	// Falls ja, hat $pos einen Wert zwischen 0 und 3 (Schlüssel des ersten und letzten Werts im Array)
	// Falls nein, ist $pos false.
	// Bei der Bedingung muss darauf geachtet werden, immer "=== false" und NICHT "== false" zu schreiben, da "== false" auch
	// dann true ergibt, wenn der gefundene Wert den Schlüssel 0 hat.
	if ($pos===false) {
		echo('"april" wurde nicht im Array gefunden.');
	} else {
		echo('"april" hat im Array den Schlüssel '.$pos);
	}
?>
Ausgabe
"april" hat im Array den Schlüssel 3


2. Mehrdimensionales Array


Um zu Bestimmen, ob ein Wert in einem mehrdimensionalen Array enthalten ist, kann array_walk_recursive($array, $callback) verwendet werden.
Entsprechend der Parameter werden ein Array und eine Callback-Funktion übergeben.
Die Callback-Funktion wird auf alle Schlüssel-Wert-Paare angewendet bei denen der Wert kann Array ist.
PHP-Code
<?php
	$arr = array('anfang'=>array('januar', 'februar'), 'ende'=>array('november', 'dezember'));
	$searchFor = 'november';
	$found = false;
	$cb = function($value, $key) use ($searchFor, &$found) {
		if ($value === $searchFor) {
			$found = true;
		}
	};
	array_walk_recursive($arr, $cb);
	if ($found === true) {
		echo('"november" ist im Array enthalten.');
	} else {
		echo('"november" ist nicht im Array enthalten.');
	}
?>
Ausgabe
"november" ist im Array enthalten.
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