Die Kraft von PHP: Die Funktion array_fill_keys verstehen
PHP array_fill_keys() erklärt: Assoziatives Array aus einer Schlüsselliste und einem gemeinsamen Wert erstellen, mit Beispielen zu Duplikaten und numerischen Schlüsseln.
array_fill_keys() ist eine eingebaute PHP-Funktion, die ein neues assoziatives Array aus einer Liste von Schlüsseln und einem einzelnen Wert erstellt, den jeder Eintrag teilt. Es ist der schnellste Weg, ein Array vorzubefüllen, wenn die benötigten Schlüssel bereits bekannt sind, aber alle mit demselben Standardwert beginnen sollen — zum Beispiel das Nullsetzen einer Reihe von Zählern, das Markieren einer Liste von Elementen als false, oder das Erstellen von Platzhaltern, die später befüllt werden.
Diese Seite erklärt, was array_fill_keys() macht, sein genaues Verhalten bei doppelten und numerischen Schlüsseln, wie es sich von array_fill() und array_combine() unterscheidet, und wann man es einsetzen sollte.
Syntax
array_fill_keys(array $keys, mixed $value): array| Parameter | Beschreibung |
|---|---|
$keys | Ein array mit Werten, die als Schlüssel des neuen Arrays verwendet werden. Jeder Eintrag wird als Schlüssel, nicht als Wert verwendet. |
$value | Der Wert, der jedem Schlüssel zugewiesen wird. Kann ein beliebiger Typ sein — ein Skalar, null, ein array oder ein object. |
Rückgabewert: ein neues Array, dessen Schlüssel aus $keys stammen und dessen Werte alle $value sind. Verfügbar seit PHP 5.2.0.
Schlüssel folgen den normalen PHP-Array-Schlüsselregeln: nur Integer und string sind gültig. Ein string, der wie eine dezimale ganze Zahl aussieht (z. B.
"5"), wird in den Integer5umgewandelt, undtrue/false/null-Schlüssel werden zu1/0/"".
Grundlegendes Beispiel
Die Schlüssel werden als erstes Argument und der gemeinsame Füllwert als zweites übergeben:
Die Ausgabe ist ein assoziatives Array mit den angegebenen Schlüsseln, die jeweils auf denselben Wert abgebildet werden:
Array
(
[a] => value
[b] => value
[c] => value
)Dies ist praktisch, wenn eine Menge von Schlüsseln vorhanden ist, die Werte aber noch keine Rolle spielen oder alle gleich beginnen sollen — ein häufiger Anwendungsfall ist die Initialisierung von Zählern mit 0:
<?php
$letters = array("a", "b", "c");
$counts = array_fill_keys($letters, 0);
$counts["a"]++;
$counts["a"]++;
$counts["c"]++;
print_r($counts);
?>Array
(
[a] => 2
[b] => 0
[c] => 1
)null, Arrays oder Objekte als Wert verwenden
Der Füllwert kann ein beliebiger Typ sein. Mit null lassen sich Platzhalter erstellen, die später befüllt werden:
<?php
$keys = array("id", "status");
$filled = array_fill_keys($keys, null);
print_r($filled);
?>Array
(
[id] =>
[status] =>
)Wenn der Wert ein array oder object ist, wird er per Wert kopiert in jeden Schlüssel, sodass das Ändern eines Eintrags die anderen nie beeinflusst:
<?php
$buckets = array_fill_keys(array("a", "b"), array());
$buckets["a"][] = 1;
print_r($buckets);
?>Array
(
[a] => Array
(
[0] => 1
)
[b] => Array
(
)
)Doppelte und numerische Schlüssel
Da das Ergebnis ein echtes PHP-Array ist, folgen die Schlüssel den normalen Array-Schlüsselregeln. Doppelte Schlüssel werden zu einem einzigen Eintrag zusammengefasst, und dezimale String-Schlüssel werden zu Integer:
<?php
print_r(array_fill_keys(array("5", 5, "name"), null));
?>Array
(
[5] =>
[name] =>
)Hier werden "5" und 5 beide als Integer-Schlüssel 5 gespeichert, sodass nur ein einziger Eintrag 5 verbleibt. Dies sollte beachtet werden, wenn die Schlüsselliste möglicherweise Duplikate enthält — das Array wird kürzer als die Eingabe sein.
array_fill_keys() vs. verwandte Funktionen
array_fill()befüllt einen Bereich von aufeinanderfolgenden Integer-Schlüsseln, beginnend bei einem bestimmten Offset, anstatt aus einer expliziten Schlüsselliste. Verwende sie, wenn0, 1, 2, …-Indizes gewünscht sind.array_combine()verknüpft ein Schlüssel-array mit einem Werte-array gleicher Länge und gibt jedem Schlüssel einen anderen Wert. Verwendearray_fill_keys(), wenn jeder Wert gleich ist.array_keys()macht das Gegenteil: Es extrahiert die Schlüssel aus einem vorhandenen Array.
Ein gängiges Muster ist es, Standardwerte mit array_fill_keys() vorzubefüllen und dann echte Daten darüber zu mergen:
<?php
$defaults = array_fill_keys(array("name", "email", "active"), null);
$input = array("name" => "Ann", "active" => true);
print_r(array_merge($defaults, $input));
?>Array
(
[name] => Ann
[email] =>
[active] => 1
)Dadurch wird sichergestellt, dass jeder erwartete Schlüssel vorhanden ist, auch wenn die eingehenden Daten unvollständig sind.
Zusammenfassung
array_fill_keys() verwandelt eine Liste von Schlüsseln plus einen gemeinsamen Wert in ein fertiges assoziatives Array. Verwende sie, um Zähler, Flags oder Platzhalter-Datensätze in einer einzigen Zeile zu initialisieren. Beachte, dass der Füllwert in jeden Schlüssel kopiert wird und dass doppelte oder dezimale String-Schlüssel nach den Standard-PHP-Array-Schlüsselregeln zusammengefasst werden. Für unterschiedliche Werte pro Schlüssel verwende array_combine(); für aufeinanderfolgende Integer-Indizes verwende array_fill(). Einen Überblick bietet der PHP-Arrays-Leitfaden.