PHP Array Combine Funktion
Die Funktion array_combine() in PHP kombiniert zwei Arrays zu einem assoziativen Array und verwendet die Werte des ersten Arrays als Schlüssel.
Die Funktion array_combine() in PHP führt zwei flache Arrays zu einem assoziativen Array zusammen: Sie verwendet die Werte des ersten Arrays als Schlüssel und die Werte des zweiten Arrays als Werte. Sie ist das Mittel der Wahl, wenn man zwei parallele Arrays hat — zum Beispiel eine Liste von Spaltennamen und eine Liste von Zellenwerten, die positionsweise übereinstimmen — und diese zu einer einzigen Schlüssel/Wert-Zuordnung zusammenführen möchte.
Diese Seite behandelt die Syntax, die Bedeutung jedes Parameters und des Rückgabewerts, die einzuhaltenden Regeln (gleiche Länge, gültige Schlüsseltypen) sowie die häufigsten Praxismuster.
Syntax
array_combine(array $keys, array $values): array| Parameter | Beschreibung |
|---|---|
$keys | Array, dessen Werte zu den Schlüsseln des Ergebnisses werden. Die Werte müssen gültige Array-Schlüssel sein (Ganzzahlen oder Strings). |
$values | Array, dessen Werte zu den Werten des Ergebnisses werden. |
Rückgabewert: ein neues assoziatives Array, das durch die paarweise Verknüpfung jedes Elements aus $keys mit dem Element aus $values an derselben Position entsteht.
Seit PHP 8.0 wirft die Übergabe von Arrays unterschiedlicher Größe einen ValueError. In PHP 7.x und früher gab die Funktion stattdessen false zurück und erzeugte eine Warnung.
Grundlegende Verwendung
Der klassische Anwendungsfall ist die Umwandlung zweier paralleler Arrays in eine Zuordnung — hier Produktnamen gepaart mit ihren Preisen.
Die Ausgabe ist:
Array
(
[Product 1] => 10
[Product 2] => 20
[Product 3] => 30
)Die Verknüpfung erfolgt nach Position, nicht durch Sortierung oder Abgleich — der erste Schlüssel wird mit dem ersten Wert gepaart, der zweite mit dem zweiten und so weiter.
Eine Zeile aus Kopfzeilen und Daten aufbauen
Ein häufiger praktischer Einsatz ist die Rekonstruktion eines assoziativen Datensatzes aus einer CSV-artigen Kopfzeile und einer Datenzeile. Genau so lässt sich beispielsweise eine geparste CSV-Zeile abbilden.
<?php
$headers = array("id", "name", "email");
$row = array(101, "Ann", "[email protected]");
$record = array_combine($headers, $row);
echo $record["name"] . " <" . $record["email"] . ">";Die Ausgabe ist:
Ann <[email protected]>Regeln und Fallstricke
Diese Einschränkungen sollte man im Hinterkopf behalten:
- Gleiche Länge ist Pflicht.
$keysund$valuesmüssen die gleiche Anzahl an Elementen haben. In PHP 8+ löst eine Abweichung einenValueErroraus; mitcount($keys) === count($values)lässt sich dies absichern, wenn die Längen nicht im Voraus bekannt sind. - Schlüssel müssen gültig sein. Als Schlüssel verwendete Werte müssen Ganzzahlen oder Strings sein. Gleitkommazahlen werden zu Ganzzahlen gekürzt, boolesche Werte werden zu
0/1umgewandelt, undnullwird zum leeren String"". - Doppelte Schlüssel werden überschrieben. Enthält das
$keys-Array wiederholte Werte, überschreiben spätere Paare frühere, sodass das Ergebnis kürzer als die Eingabe sein kann. Um die Anzahl eindeutiger Schlüssel zu ermitteln, siehearray_unique(). - Nur die Werte werden verwendet. Die ursprünglichen Schlüssel beider Eingabe-Arrays werden ignoriert — nur ihre Werte sind relevant.
Das folgende Beispiel zeigt, wie ein doppelter Schlüssel zwei Einträge zu einem zusammenfasst:
<?php
$keys = array("a", "b", "a");
$values = array(1, 2, 3);
print_r(array_combine($keys, $values));Das letzte "a" => 3 überschreibt das erste, sodass die Ausgabe lautet:
Array
(
[a] => 3
[b] => 2
)Verwandte Funktionen
array_merge()— fügt Arrays durch Anhängen von Werten zusammen, anstatt Schlüssel mit Werten zu paaren.array_flip()— vertauscht Schlüssel und Werte eines einzelnen Arrays.array_keys()undarray_values()— die umgekehrte Operation: Schlüssel oder Werte aus einem assoziativen Array extrahieren.
Fazit
array_combine() ist der sauberste Weg, zwei parallele Arrays zu einem assoziativen Array zusammenzuführen, indem sie Element für Element gepaart werden. Die zwei häufigsten Stolpersteine sind: Die Arrays müssen gleich lang sein (sonst ein ValueError in PHP 8+), und doppelte Schlüssel überschreiben sich stillschweigend gegenseitig.