W3docs

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): array

Jedes 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

php— editable, runs on the server

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 Sie compact('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

php— editable, runs on the server

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"), nicht compact($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 null ist, überspringt jedoch Namen ohne passende Variable (Warnung in PHP 8.0+). Verwenden Sie isset() 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, siehe get_defined_vars().

Verwandte Funktionen

  • extract() — das Gegenstück zu compact(): 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.

Übungen

Übung
Welche Aufgabe hat die 'compact()'-Funktion in PHP?
Welche Aufgabe hat die 'compact()'-Funktion in PHP?
Was this page helpful?