Was macht PHP array_reverse()?
Wer in PHP eine Liste in genau der entgegengesetzten Reihenfolge anzeigen will, also etwa die neuesten Newsbeiträge zuerst oder die letzte Datenbankzeile am Anfang, sucht nach einer schlanken Lösung. Genau hier kommt PHP array_reverse ins Spiel: Die Funktion nimmt ein Array entgegen und gibt ein neues Array zurück, in dem die Elemente in umgekehrter Reihenfolge stehen. Aus [1, 2, 3] wird [3, 2, 1], ganz ohne Schleife oder eigene Logik.

Die folgenden Abschnitte klären den oft missverstandenen Parameter preserve_keys und grenzen das Umkehren klar gegen das Sortieren mit rsort ab.
So unspektakulär das auf den ersten Blick wirkt, so häufig kommt PHP array_reverse() im Alltag vor. News-Listen, Stack-Auswertungen, Forum-Threads, Audit-Logs, all diese Anwendungsfälle profitieren von einer schnellen Umkehr. Das Tutorial zeigt die wichtigsten Patterns, klärt den Unterschied zwischen Umkehren und Sortieren und erklärt den oft missverstandenen Parameter preserve_keys.
Syntax und Parameter
Die Signatur ist kompakt. PHP array_reverse() erwartet ein Array und akzeptiert optional einen zweiten Parameter, der das Verhalten bei numerischen Schlüsseln steuert.
<?php
array_reverse(array $array, bool $preserve_keys = false): array
Der Rückgabewert ist immer ein neues Array. Das Original bleibt unverändert, weil die Funktion nicht per Referenz arbeitet. Wer das Ergebnis in-place braucht, weist es einfach derselben Variable zu. Der Parameter preserve_keys sorgt dafür, dass auch numerische Schlüssel ihre Werte behalten, was im nächsten Abschnitt im Detail betrachtet wird.
Erstes Beispiel mit print_r
Zum Einstieg ein einfaches Beispiel mit einem numerischen Array. PHP array_reverse() liefert die Werte in umgekehrter Reihenfolge zurück, wobei standardmäßig die Schlüssel ab 0 neu vergeben werden.
<?php
$zahlen = [1, 2, 3, 4, 5];
print_r(array_reverse($zahlen));
/* Array
(
[0] => 5
[1] => 4
[2] => 3
[3] => 2
[4] => 1
) */
Das Ergebnis ist erwartbar. Die Werte stehen in umgekehrter Reihenfolge, die Schlüssel sind weiterhin lückenlos und beginnen bei 0. Im nächsten Schritt wird interessant, wie sich PHP array_reverse() bei assoziativen Arrays verhält.
Verhalten bei assoziativen Arrays
Assoziative Arrays behalten ihre Schlüssel immer, unabhängig vom Wert des preserve_keys-Parameters. Die Reihenfolge der Einträge wird umgedreht, jeder Schlüssel bleibt seinem Wert zugeordnet.
<?php
$user = ['name' => 'Anna', 'rolle' => 'admin', 'land' => 'DE'];
print_r(array_reverse($user));
/* Array
(
[land] => DE
[rolle] => admin
[name] => Anna
) */
Das ist die intuitive Erwartung, die in der Praxis meistens passt. Wer ein gemischtes Array hat, also numerische und String-Schlüssel kombiniert, bekommt das gleiche Verhalten: Die String-Schlüssel bleiben, und die numerischen werden je nach preserve_keys umindiziert oder beibehalten.
Der Parameter preserve_keys
Der zweite Parameter wird interessant, sobald die numerischen Schlüssel selbst eine Bedeutung tragen. Im typischen Fall sind das ID-Felder aus einer Datenbank oder Indizes, die zu anderen Listen passen müssen.
<?php
$daten = [10 => 'a', 11 => 'b', 12 => 'c'];
print_r(array_reverse($daten));
/* Array ( [0] => c [1] => b [2] => a )
Schluessel werden ab 0 neu vergeben */
print_r(array_reverse($daten, true));
/* Array ( [12] => c [11] => b [10] => a )
Schluessel bleiben erhalten */
Wer sich nicht sicher ist, ob die numerischen Schlüssel relevant sind, sollte preserve_keys lieber auf true setzen. Das ist die defensive Variante und schützt vor subtilen Bugs, wenn der Code später erweitert wird und die ID-Werte plötzlich gebraucht werden.
Praxisbeispiel News-Liste
Eine News-Liste aus der Datenbank kommt oft in chronologischer Reihenfolge zurück. Wer die jüngsten Beiträge zuerst anzeigen will, kann das entweder im SQL-Statement mit ORDER BY datum DESC regeln oder das Ergebnis in PHP umdrehen.
<?php
$artikel = [
['titel' => 'Eintrag 1', 'datum' => '2026-01-10'],
['titel' => 'Eintrag 2', 'datum' => '2026-02-15'],
['titel' => 'Eintrag 3', 'datum' => '2026-03-22'],
];
foreach (array_reverse($artikel) as $beitrag) {
echo $beitrag['datum'] . ': ' . $beitrag['titel'] . "\n";
}
/* 2026-03-22: Eintrag 3
2026-02-15: Eintrag 2
2026-01-10: Eintrag 1 */
Beide Wege führen zum Ziel. Im SQL-Statement ist die Sortierung effizienter, weil die Datenbank den Index nutzen kann. PHP array_reverse() ist sinnvoll, wenn die Daten aus einer anderen Quelle stammen oder bereits in der App vorliegen und ohne weiteren Datenbank-Round-Trip umgekehrt angezeigt werden sollen. Im Frontend lässt sich die foreach-Schleife so direkt mit dem umgekehrten Array füttern.
Stack-Reversal mit array_reverse()
Arrays werden in PHP häufig als Stack genutzt, mit array_push() und array_pop(). Wer einen Stack einmal in der entgegengesetzten Richtung durchlaufen will, etwa für eine Undo-Historie oder eine Replay-Funktion, dreht ihn mit PHP array_reverse() einmalig um.
<?php
$historie = [];
array_push($historie, 'open file');
array_push($historie, 'edit text');
array_push($historie, 'save file');
/* Replay in chronologischer Reihenfolge: */
foreach ($historie as $aktion) {
echo $aktion . "\n";
}
/* Undo in umgekehrter Reihenfolge: */
foreach (array_reverse($historie) as $aktion) {
echo 'Rueckgaengig: ' . $aktion . "\n";
}
Das Pattern ist sehr lesbar und vermeidet manuelles Indexrechnen. Wer den Stack regelmäßig in beide Richtungen durchläuft, sollte ihn aber nicht jedes Mal neu reversen. Stattdessen lohnt es sich, die umgedrehte Variante einmal zu cachen, falls der Stack zwischenzeitlich nicht modifiziert wird.
flowchart TD
A["Original-Array"] --> B{"Schluesseltyp?"}
B -->|numerisch| C{"preserve_keys?"}
B -->|assoziativ| D["Reihenfolge umdrehen, Keys erhalten"]
C -->|false| E["Reihenfolge umdrehen, Keys neu"]
C -->|true| D
Unterschied zu rsort und usort
Im Code-Bestand großer Projekte werden array_reverse() und rsort() oder usort() gelegentlich verwechselt. Der Unterschied ist fundamental: PHP array_reverse() dreht die bestehende Reihenfolge um, ohne die Werte miteinander zu vergleichen. rsort() sortiert das Array absteigend, vergleicht also die Werte und ordnet sie neu.
<?php
$werte = [5, 1, 4, 2, 3];
print_r(array_reverse($werte));
/* Array ( [0] => 3 [1] => 2 [2] => 4 [3] => 1 [4] => 5 )
Reihenfolge umgedreht */
rsort($werte);
print_r($werte);
/* Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 )
absteigend sortiert */
Wer eine Liste sortiert haben will, nimmt rsort. Wer eine bereits sortierte Liste in die Gegenrichtung anzeigen will, nimmt array_reverse. Der Unterschied klingt klein, ist im Bug-Tracking aber regelmäßig die Quelle für falsche Ausgaben.
Performance und Best Practices
PHP array_reverse() ist intern in C implementiert und damit sehr schnell. Selbst bei Arrays mit zehntausenden Elementen ist die Laufzeit kein praktisches Problem. Trotzdem allokiert die Funktion ein neues Array im Speicher, deshalb sollte sie bei sehr großen Datenmengen nicht unnötig oft aufgerufen werden.
Drei Best Practices haben sich in der Praxis bewährt. Erstens, bei Datenbank-Listen lieber ORDER BY im SQL nutzen, weil das den Index ausnutzt und keinen zusätzlichen Speicher in PHP belegt. Zweitens, beim Mischen von numerischen und String-Schlüsseln immer überlegen, ob preserve_keys = true defensiv sinnvoll ist. Drittens, das Resultat einer Variable zuweisen statt die Funktion wiederholt aufzurufen, wenn der Wert mehrfach gebraucht wird.
Wer in einer foreach-Schleife einfach nur rückwärts iterieren will, kann sich array_reverse auch sparen und stattdessen mit einer for-Schleife und absteigendem Index arbeiten. Bei kleinen Arrays sind beide Varianten gleichwertig, bei sehr großen Arrays spart die for-Schleife die Speicher-Allokation des umgedrehten Arrays.
Fazit
PHP array_reverse() ist eine schlanke und sehr nützliche Funktion, um die Reihenfolge eines Arrays umzudrehen. Sie eignet sich für News-Listen, Stack-Reversals, Undo-Historien und alle Fälle, in denen Daten in der Gegenrichtung angezeigt werden sollen. Wer den Parameter preserve_keys bewusst nutzt und die Funktion klar von echten Sortier-Funktionen wie rsort() abgrenzt, hat ein verlässliches Werkzeug für den Alltag.