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
1 2 3 4 5 6 7 8 | <?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
1 2 3 4 5 6 7 8 9 10 | <?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
1 2 3 4 5 6 7 | <?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
1 2 3 4 5 6 7 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?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