Der ultimative Leitfaden zur PHP-Funktion array_keys
Die PHP-Funktion array_keys ist ein unverzichtbares Werkzeug für PHP-Entwickler. Dieser Artikel erklärt Syntax, Suchmodus und typische Anwendungsfälle.
array_keys() gibt die Schlüssel (Indizes) eines Arrays als neues, numerisch neu indizierteres Array zurück. Es ist eine der häufigsten Methoden, um die Struktur eines Arrays zu inspizieren: Man greift darauf zurück, wenn man wissen möchte, welche Slots ein array hat, und nicht, welche Werte darin gespeichert sind.
Dieses Kapitel erläutert die Syntax, den optionalen Wertsuchmodus, den Unterschied zwischen loser und strikter Vergleichsweise sowie die alltäglichen Muster, bei denen array_keys() das richtige Werkzeug ist.
Was array_keys() macht
Jedes PHP-Array ist eine geordnete Abbildung von Schlüssel → Wert-Paaren. Der Schlüssel kann eine ganze Zahl sein (wie in einem einfachen indizierten array) oder ein string (wie in einem assoziativen array). array_keys() verwirft die Werte und gibt nur die Schlüssel in ihrer ursprünglichen Reihenfolge zurück, neu nummeriert ab 0:
- Übergibt man ein array, erhält man jeden Schlüssel.
- Übergibt man einen Suchwert, erhält man nur die Schlüssel, deren Wert mit dem Suchwert übereinstimmt.
Das Ergebnis ist immer ein neues array, das ursprüngliche wird nie verändert. Wenn man stattdessen die Werte haben möchte, verwendet man array_values(); wenn man nur wissen muss, ob ein bestimmter Schlüssel vorhanden ist, ist array_key_exists() effizienter.
Syntax
array_keys(array $array, mixed $search_value = ?, bool $strict = false): array| Parameter | Erforderlich | Beschreibung |
|---|---|---|
$array | Ja | Das array, aus dem die Schlüssel gelesen werden. |
$search_value | Nein | Falls angegeben, werden nur Schlüssel zurückgegeben, deren Wert diesem entspricht. |
$strict | Nein | Wenn true, wird für die Suche ein strikter (===) Vergleich verwendet, sodass auch die Typen übereinstimmen müssen. Standardmäßig false. |
Die Funktion gibt immer ein array zurück; bei keinen Treffern wird ein leeres array zurückgegeben, niemals false.
Alle Schlüssel eines Arrays abrufen
Die häufigste Verwendung ist das Auslesen aller Schlüssel aus einem assoziativen array:
Ausgabe:
Array
(
[0] => a
[1] => b
[2] => c
)Das zurückgegebene $keys-array enthält die drei string-Schlüssel "a", "b" und "c", neu indiziert ab 0. Die Werte (apple, banana, cherry) sind weg — nur die Schlüssel bleiben erhalten.
Schlüssel für einen Wert finden
Gibt man ein zweites Argument an, wird array_keys() zur Suche: Es gibt den Schlüssel jedes Elements zurück, das diesem Wert entspricht. Dies ist der wesentliche Unterschied zu array_search(), das beim ersten Treffer stoppt.
Ausgabe:
Array
(
[0] => 0
[1] => 3
)"apple" erscheint an Position 0 und 3, daher werden beide Schlüssel zurückgegeben. Wenn der Wert gar nicht gefunden wird, erhält man ein leeres array.
Loser vs. strikter Vergleich
Standardmäßig verwendet die Wertsuche einen losen Vergleich (==), sodass 1, "1" und 1.0 alle als gleich behandelt werden. Setzt man das dritte Argument auf true, wird eine exakte Typ-und-Wert-Übereinstimmung verlangt (===):
<?php
$values = array("1", 1, "one", 1, "1");
// Loose: matches both strings and integers
print_r(array_keys($values, 1));
// Strict: matches only the integer 1
print_r(array_keys($values, 1, true));
?>Ausgabe:
Array
(
[0] => 0
[1] => 1
[2] => 3
[3] => 4
)
Array
(
[0] => 1
[1] => 3
)Die lose Suche findet "1", 1, 1 und "1" (Schlüssel 0, 1, 3, 4), während die strikte Suche nur die beiden ganzzahligen 1-Werte findet (Schlüssel 1 und 3). Verwende $strict = true, wenn dein array strings und Zahlen mischt und der Unterschied wichtig ist.
Schlüssel eines mehrdimensionalen Arrays
array_keys() schaut nur auf die oberste Ebene — es gibt die Schlüssel des äußeren Arrays zurück und geht nie in verschachtelte Arrays hinab. Bei einem mehrdimensionalen array erhält man die äußeren Schlüssel:
<?php
$matrix = array(
"row1" => array("a" => 1, "b" => 2),
"row2" => array("c" => 3),
);
print_r(array_keys($matrix));
?>Ausgabe:
Array
(
[0] => row1
[1] => row2
)Um auch innere Schlüssel zu erfassen, iteriert man über das Ergebnis und ruft array_keys() für jedes Unter-array auf.
Über Schlüssel iterieren
Ein häufiges Muster ist das Durchlaufen einer Struktur anhand ihrer Schlüssel. Da array_keys() eine saubere Liste liefert, kann man eine foreach-Schleife direkt damit steuern:
<?php
$prices = array("pen" => 1.20, "book" => 5.00, "bag" => 12.50);
foreach (array_keys($prices) as $item) {
echo $item . PHP_EOL;
}
?>Ausgabe:
pen
book
bagIm täglichen Code würde man oft stattdessen foreach ($prices as $item => $price) verwenden — aber array_keys() ist praktisch, wenn man die Schlüsselliste als Wert benötigt (um sie weiterzugeben, zu zählen oder die Schlüssel zweier Arrays zu vergleichen).
Häufige Anwendungsfälle und Fallstricke
- Schlüssel zählen:
count(array_keys($arr))ist dasselbe wiecount($arr)— verwende direktcount($arr). - Prüfen, ob ein Schlüssel vorhanden ist: Verwende nicht
in_array($k, array_keys($arr))— nutze stattdessenarray_key_exists()oderisset(), die schneller und klarer sind. (Um auf einen Wert zu prüfen, verwendein_array().) - Das Ergebnis ist immer neu indiziert: Die eigenen Schlüssel des zurückgegebenen Arrays sind stets
0, 1, 2, …, unabhängig von den ursprünglichen Schlüsseln. - Keine Treffer gibt
[]zurück: Die Wertsuche gibt niemalsfalsezurück, daher prüft man mitempty()odercount(), nicht mit=== false.
Fazit
array_keys() extrahiert die Schlüssel eines Arrays, optional gefiltert nach Wert mit losem oder striktem Vergleich. Verwende es, um Schlüssel aufzulisten, alle Positionen eines Wertes zu finden oder eine Schlüsselliste in eine Schleife zu speisen. Für die entsprechenden Werte verwende array_values(), um einen einzelnen Schlüssel zu prüfen verwende array_key_exists(), und um den ersten Treffer eines Wertes zu finden verwende array_search().