PHP Array Compact Funktion
Lernen Sie, wie PHP's compact() aus vorhandenen Variablen ein assoziatives Array erstellt – mit Syntax, Beispielen und häufigen Stolperfallen.
Was ist die PHP compact()-Funktion?
compact() ist eine in PHP eingebaute Funktion, die aus vorhandenen Variablen ein assoziatives Array aufbaut. Sie übergeben ihr die Namen von Variablen (als string), und sie gibt ein array zurück, dessen Schlüssel diese Namen und dessen Werte die aktuellen Werte der Variablen sind. Sie ist das Gegenstück zu extract(), das ein array wieder in einzelne Variablen umwandelt.
Diese Seite behandelt die Syntax, wie compact() Variablennamen auflöst, die Übergabe von Namen als array, was bei null und undefinierten Variablen passiert, und einen typischen Praxisanwendungsfall.
Syntax
compact(string|array ...$var_names): arrayJedes Argument ist entweder ein string mit einem Variablennamen oder ein array solcher strings. compact() gibt das resultierende assoziative array zurück.
Wie funktioniert es?
compact() durchsucht den aktuellen Scope nach jedem übergebenen Namen. Existiert eine Variable mit diesem Namen, wird sie zum Ergebnis hinzugefügt (der Name wird zum Schlüssel, der Variablenwert zum Wert) — auch wenn der Wert null ist. Existiert keine solche Variable, wird dieser Name übersprungen, und PHP 8.0+ gibt eine Warnung aus („Undefined variable").
Hier ist der einfachste Fall:
Einfaches compact()-Beispiel
Wir erstellen drei Variablen und übergeben ihre Namen an compact(). Das resultierende array sieht so aus:
Array (
[name] => John
[age] => 30
[city] => New York
)Beachten Sie, dass Sie die Namen ohne das führende $ übergeben — "name", nicht $name.
Warum compact() verwenden?
- Weniger Wiederholung: Statt
['name' => $name, 'age' => $age, 'city' => $city]zu schreiben, schreiben Siecompact('name', 'age', 'city'). Schlüssel und Variablenname bleiben automatisch synchron. - Lesbarkeit: Wenn Schlüssel und Variable bereits denselben Namen teilen, entfernt
compact()den visuellen Lärm durch das doppelte Notieren jedes Paares. - Weniger Tippfehler: Beim manuellen Schreiben von Schlüssel-Wert-Paaren ist es leicht, einen Schlüssel falsch zu schreiben. Mit
compact()wird der Schlüssel aus dem Variablennamen abgeleitet.
Beispiele
Eine Variable mit dem Wert null einschließen
Hier ist $state definiert, enthält aber null. Da die Variable existiert, wird sie dennoch aufgenommen — ihr Wert im array ist null (den print_r als leeren Wert anzeigt):
Array (
[name] => John
[age] => 30
[city] => New York
[state] =>
)Ein Name ohne passende Variable im Scope ist ein anderer Fall: Er wird vollständig übersprungen (und PHP 8.0+ gibt eine Warnung aus). compact('name', 'missing') gibt also nur ['name' => 'John'] zurück.
Namen als array übergeben
Jedes Argument kann selbst ein array von Namen sein, das compact() entfaltet. Dies ist praktisch, wenn die Feldliste dynamisch aufgebaut wird:
<?php
$name = "John";
$age = 30;
$city = "New York";
$fields = ["name", "age"];
$myArray = compact("city", $fields);
print_r($myArray);
?>Array (
[city] => New York
[name] => John
[age] => 30
)Praxisanwendung: Daten an ein Template übergeben
compact() glänzt, wenn Sie einer View oder einem Template ein Bündel benannter Werte übergeben möchten, ohne das array manuell aufzubauen:
<?php
function renderProfile() {
$username = "jdoe";
$role = "admin";
$isActive = true;
// Pass all three as a tidy associative array
return compact("username", "role", "isActive");
}
print_r(renderProfile());
?>Array (
[username] => jdoe
[role] => admin
[isActive] => 1
)Tipps und Stolperfallen
- Übergeben Sie Variablennamen ohne das
$-Zeichen:compact("name"), nichtcompact($name). compact()liest nur den aktuellen Scope — innerhalb einer Funktion sieht es die lokalen Variablen dieser Funktion, nicht globale.- Es schließt Variablen ein, deren Wert
nullist, überspringt jedoch Namen ohne passende Variable (Warnung in PHP 8.0+). Verwenden Sieisset()oder definieren Sie die Variable vorab, falls sie vorhanden sein muss. - Um den umgekehrten Weg zu gehen — ein array in Variablen umwandeln — verwenden Sie
extract(). Um zu prüfen, welche Variablen im Scope existieren, sieheget_defined_vars().
Verwandte Funktionen
extract()— das Gegenstück zucompact(): importiert array-Schlüssel als Variablen.get_defined_vars()— gibt alle im aktuellen Scope definierten Variablen zurück.- Assoziative Arrays — die Art von array, die
compact()erzeugt.