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.

Kommentare (1)

Von neu nach alt
3
3
3
ArnoNuehm (Gast) #