In der Programmierung gibt es häufig Situationen, in denen man die Werte von zwei Variablen miteinander tauschen muss. Ein typisches Beispiel ist das Sortieren von Werten oder das Umordnen von Daten, wo Werte ihren Platz tauschen sollen. Üblicherweise nutzt man dafür eine dritte, temporäre Variable: Man speichert zunächst den Wert der ersten Variable zwischen, weist dann der ersten Variable den Wert der zweiten zu und schließlich der zweiten Variable den zuvor zwischengespeicherten Wert. Diese Methode funktioniert, ist aber etwas umständlich und verbraucht eine zusätzliche Variable.
PHP bietet hierfür eine elegantere Lösung, die ohne eine Hilfsvariable auskommt. Mit Hilfe des Sprachkonstrukts list()
lässt sich der Tausch der Variablenwerte in einer einzigen Codezeile bewerkstelligen. Im folgenden Artikel wird gezeigt, wie diese Ein-Zeilen-Methode funktioniert und warum sie gerade für einfache Fälle eine schicke Alternative darstellt.
Das Problem und die Lösung mit list()
Das Kernproblem beim Vertauschen zweier Variablen ist, dass beim direkten Zuweisen ein Wert überschrieben würde. Die klassische Lösung mit einer temporären Variable umgeht dieses Problem, kann aber den Code aufblähen. In PHP gibt es jedoch die Möglichkeit, mehrere Zuweisungen gleichzeitig vorzunehmen. Genau das macht sich die list()
-Funktion (genauer gesagt ein Sprachkonstrukt) zunutze. Sie erlaubt es, ein Array von Werten in einem Schritt auf mehrere Variablen zu verteilen. Indem man die zwei zu tauschenden Werte in der umgekehrten Reihenfolge in ein Array packt und dieses Array dann per list()
auf die ursprünglichen Variablen zuweist, erreicht man den Tausch in einem Rutsch.
Ein einfaches Codebeispiel verdeutlicht diese Lösung:
<?php
$a = "Wert A";
$b = "Wert B";
/** Vertauschen der Werte mittels list() und array() */
list($a, $b) = array($b, $a);
/** Ausgabe der Ergebnisse zur Überprüfung */
echo $a.' - '. $b;
?>
In diesem PHP-Code werden zunächst zwei Variablen $a
und $b
mit Beispielwerten ("Wert A"
bzw. "Wert B"
) definiert. Anschließend erfolgt der Tausch der Inhalte durch die Zeile list($a, $b) = array($b, $a);
. Hierbei erstellt array($b, $a)
ein Array, das die ursprünglichen Werte von $b
und $a
enthält. Die list()
-Funktion auf der linken Seite entpackt dieses Array simultan in die Variablen $a
und $b
. Durch die umgekehrte Anordnung der Elemente im Array werden die Werte gezielt vertauscht: $a
erhält den früheren Wert von $b
, und $b
erhält den früheren Wert von $a
. Auf diese Weise sind nach Ausführung der Zeile die Inhalte der beiden Variablen erfolgreich getauscht – und das alles in nur einer einzigen Anweisung.
Ausgabe und Funktionsweise
Führt man das obige Skript aus, würde es folgende Ausgabe erzeugen:
Wert B - Wert A
Hier ist zu sehen, dass nach dem Tausch $a
den Wert "Wert B"
enthält und $b
den Wert "Wert A"
. Die Funktionsweise hinter dieser einzeiligen Lösung beruht auf dem Prinzip der Array-Destrukturierung: PHP nimmt zunächst den Ausdruck auf der rechten Seite (array($b, $a)
) und erstellt daraus ein Array mit den aktuellen Werten der Variablen. Erst danach – wenn alle Werte gesammelt sind – weist list($a, $b)
diese Werte den Variablen auf der linken Seite zu. Dank dieses zweistufigen Vorgehens gehen keine Werte verloren. Das bedeutet, dass $a
genau den alten Wert von $b
zugewiesen bekommt, bevor $b
anschließend den alten Wert von $a
erhält. Auf diese Weise findet ein korrekter Tausch statt, ohne dass eine dritte Variable nötig ist.
Diese kompakte Lösung macht sich also eine in PHP eingebaute Fähigkeit zunutze, mehrere Variablen gleichzeitig zu befüllen. Wie im offiziellen PHP-Handbuch beschrieben, eignet sich die Array-Destrukturierung mittels list()
hervorragend, um zwei Variablenwerte elegant zu vertauschen. Die Ausgabe oben bestätigt, dass die Technik wie gewünscht funktioniert: Die Werte haben ihre Plätze getauscht.
Wichtige Hinweise zur Praxis
Auch wenn das Vertauschen mit list()
sehr clever und zeitsparend wirkt, sollte man diese Methode mit Bedacht einsetzen. In größeren Projekten oder in Teams kann übermäßiger Einsatz solcher kompakten Tricks die Lesbarkeit des Codes beeinträchtigen. Nicht jeder Entwickler ist sofort mit dieser Idiomatik vertraut; ein Code, der voller ungewohnter Einzeiler steckt, kann für andere schwer nachvollziehbar sein. Im schlimmsten Fall verliert man selbst den Überblick, wenn man später zum Code zurückkehrt.
Deshalb gilt: Verwenden Sie diese Technik sparsam und nur dort, wo sie wirklich einen Mehrwert an Übersicht oder Kürze bietet. Für die meisten Anwendungsfälle ist die klassische Variante mit einer temporären Variable vollkommen in Ordnung und für Mitentwickler leichter zu verstehen. Klarer, gut dokumentierter Code trägt wesentlich zur Wartbarkeit und Fehlersuche bei. Die hier vorgestellte list()
-Methode zum Variablentausch ist ein nützliches Werkzeug in Ihrem PHP-Repertoire – aber wie bei jedem Werkzeug sollte man sie gezielt und verantwortungsvoll einsetzen. So stellen Sie sicher, dass Ihr Code sowohl elegant als auch gut nachvollziehbar bleibt.