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 altWir bitten um ihr Verständnis.
3
3