W3docs

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
ParameterErforderlichBeschreibung
$arrayJaDas array, aus dem die Schlüssel gelesen werden.
$search_valueNeinFalls angegeben, werden nur Schlüssel zurückgegeben, deren Wert diesem entspricht.
$strictNeinWenn 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:

php— editable, runs on the server

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.

php— editable, runs on the server

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
bag

Im 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 wie count($arr) — verwende direkt count($arr).
  • Prüfen, ob ein Schlüssel vorhanden ist: Verwende nicht in_array($k, array_keys($arr)) — nutze stattdessen array_key_exists() oder isset(), die schneller und klarer sind. (Um auf einen Wert zu prüfen, verwende in_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 niemals false zurück, daher prüft man mit empty() oder count(), 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().

Übungen

Übung
Was ist die Aufgabe der Funktion array_keys() in PHP?
Was ist die Aufgabe der Funktion array_keys() in PHP?
Was this page helpful?