veröffentlicht am: 13.05.2020 zuletzt aktualisiert am: 06.02.2023
Oft wollen wir überprüfen, ob sich ein spezieller Wert oder Schlüssel in unserem Array befindet. In PHP finden sich dafür einige Funktionen, von denen ich dir hier die PHP in_array, array_search und array_key_exists Funktionen vorstellen möchte.
Mit der Funktion in_array kannst du überprüfen, ob sich ein Wert in einem Array befindet. Sie akzeptiert 3 Parameter, von denen einer optional ist.
in_array($needle, $haystack, $strict = FALSE) $needle (erforderlich) der gesuchte Wert $haystack (erforderlich) das Array, in dem der Wert gesucht wird $strict (optional) legt fest, ob der vergleich lose oder strikt erfolgt Standardmäßig FALSE
in_array gibt einen Boolean zurück, der angibt, ob der Wert gefunden wurde.
$array = [0, 1]; var_dump(in_array(0, $array)); // bool(true) var_dump(in_array(3, $array)); // bool(false)
Allerdings ist zu beachten, dass in_array standardmäßig nur lose Vergleiche durchführt. Das kann zu unerwarteten Ergebnissen führen.
$array = [1, 2]; var_dump(in_array('CodeCitrus', $array)); // bool(false) $array = [0, 1]; var_dump(in_array('CodeCitrus', $array)); // bool(true)
Bei dem zweiten Aufruf von in_array erhalten wir true, obwohl der String ‘CodeCitrus’ eindeutig nicht in dem Array vorhanden ist.Das liegt an der Art und Weise des Vergleichs:Wird ein String in PHP mit einem Integer verglichen, so entspricht der String 0.
var_dump('CodeCitrus' == 0); // bool(true)
Dies ist nur der Fall beim losen Vergleich.Wenn du also Werte möglicherweise verschiedenen Typs miteinander vergleichen möchtest, solltest du einen strikten Vergleich wählen.
var_dump('CodeCitrus' === 0); // bool(false)
Bei in_array kannst du diesen strikten Vergleich erzwingen, indem du den dritten Parameter auf TRUE setzt.
$array = [0, 1]; var_dump(in_array(0, $array, TRUE)); // bool(true) var_dump{"type":"block","srcIndex":9,"srcClientId":"eef2c3af-cd53-4442-adae-6d54cf35f566","srcRootClientId":""}(in_array(3, $array, TRUE)); // bool(false) var_dump(in_array('CodeCitrus', $array, TRUE)); // bool(false)
Du kannst in_array auch auf assoziative Arrays anwenden.
$ass_arr = ['Code' => 'Citrus', 'foo' => 'bar']; var_dump(in_array('Citrus', $ass_arr, TRUE)); // bool(true)
Auch ein Array in einem multidimensionalen Array lässt sich so finden:
$multi_arr = [ [0, 1], ['foo'] ]; $arr = ['foo']; var_dump(in_array($arr, $multi_arr, TRUE)); // bool(true)
array_search akzeptiert die gleichen Parameter wie in_array.Als Rückgabewert erhältst du hier allerdings den zu dem gesuchten Wert gehörenden Schlüssel oder false, wenn nichts gefunden wird.
$array = [0, 1]; var_dump(array_search(0, $array)); // int(0) var_dump(array_search(3, $array)); // bool(false) var_dump(array_search('CodeCitrus', $array)); // int(0)
Du siehst, auch hier ist es meistens ratsam, den Parameter $strict auf TRUE zu setzen.
$array = [0, 1]; var_dump(array_search(0, $array, TRUE)); // int(0) var_dump(array_search(3, $array, TRUE)); // bool(false) var_dump(array_search('CodeCitrus', $array, TRUE)); // bool(false)
Diese Funktion kann ebenfalls auf assoziative Arrays angewendet werden:
$ass_arr = ['Code' => 'Citrus', 'foo' => 'bar']; var_dump(array_search('Citrus', $ass_arr)); // string(4) "Code"
Und auch auf Mehrdimensionale:
$multi_arr = [ [0, 1], ['foo'] ]; $arr = ['foo']; var_dump(array_search($arr, $multi_arr)); // int(1)
Wenn du stattdessen überprüfen willst, ob ein Schlüssel existiert, dann ist die Funktion array_key_exists das richtige für dich.Die Funktion hat 2 Parameter: den Schlüssel, der gesucht wird und das zu durchsuchende Array. Der Rückgabewert ist ein Boolean.Sie kann sowohl auf einfache als auch assoziative Arrays angewendet werden.
$arr = ['foo']; var_dump(array_key_exists(0, $arr)); // bool(true) $arr = ['Code'=>'Citrus']; var_dump(array_key_exists(0, $arr)); // bool(false) var_dump(array_key_exists('Code', $arr)); // bool(true)
Mit der Funktion array_flip kannst du die Schlüssel-Wert-Paare umdrehen.Das heißt, der Schlüssel wird zum Wert und der Wert zum Schlüssel. So kannst du dann mit array_key_exists nach dem Wert als Schlüssel suchen.Praktisch könntest du das so anwenden:
$arr = ['Code' => 'Citrus', 'foo' => 'bar', 'Antwort' => 42]; $arr = array_flip($arr); var_dump($arr); // array(3) { ["Citrus"]=> string(4) "Code" ["bar"]=> string(3) "foo" [42]=> string(7) "Antwort" } var_dump(array_key_exists('Citrus', $arr)); // bool(true)
Während in_array durchaus eine einfache Möglichkeit bietet, zu überprüfen, ob ein Wert vorhanden ist, musst du genau darauf achten, wie die Werte verglichen werden.Dasselbe gilt für die Suche nach Schlüsseln anhand des Wertes mit array_search.Mit array_key_exists kannst du zusätzlich überprüfen, ob ein bestimmter Schlüssel in einem Array existiert.
Wenn du Fragen, Anmerkungen, Lob, Kritik hast, schreib mir bitte einen Kommentar.
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig