Manchmal liegt ein Array vor, in dem die Werte als Schlüssel weit besser zu gebrauchen wären als die Schlüssel selbst. Genau diese Umkehrung erledigt array_flip() in einem einzigen Aufruf. Was wie eine Spielerei aussieht, ist in der Praxis ein bekannter Performance-Hack für Lookups und spätestens bei großen Listen ein echter Vorteil gegenüber in_array().
Was macht PHP array_flip()?
Wer in PHP mit assoziativen Arrays arbeitet, kommt früher oder später in eine Situation, in der die Werte als Schlüssel und die Schlüssel als Werte interessanter sind. Genau dafür gibt es PHP array_flip: Die Funktion nimmt ein Array entgegen und gibt ein neues Array zurück, in dem Schlüssel und Werte vertauscht sind. Aus ['rot' => 'red'] wird so ['red' => 'rot']. Dieses einfache Beispiel zeigt das Grundprinzip in einer Zeile.

Bevor die Lookup-Optimierung gegenüber in_array und die typischen Stolperfallen beleuchtet werden, lohnt ein kurzer Blick auf den eigentlichen Mehrwert dieser Tausch-Operation.
So einfach wie das klingt, so wertvoll ist die Funktion in der Praxis. PHP array_flip() ist nicht nur ein Spielzeug für Konvertierungen, sondern eine echte Performance-Optimierung, wenn es um Lookups geht. Statt mit in_array() jedes Element zu durchsuchen, lässt sich nach dem Tausch in O(1) mit isset() prüfen, ob ein Wert vorhanden ist. Das Tutorial zeigt diese Anwendung Schritt für Schritt und entschärft die typischen Stolperfallen mit doppelten Werten und falschen Typen.
Syntax und Rückgabewert
Die Signatur ist die schlankste, die eine Array-Funktion in PHP haben kann. PHP array_flip() erwartet genau ein Array und gibt das vertauschte Array zurück.
<?php
array_flip(array $array): array
Der Rückgabewert ist immer ein Array. Wenn das Eingabe-Array Werte enthält, die keine gültigen Array-Schlüssel sein können, wirft PHP eine Warnung und überspringt den entsprechenden Eintrag. Gültige Schlüssel sind in PHP nur Strings oder Integer. Floats werden zu Integer gecastet, Booleans zu 0 oder 1. Diese Typkonvertierung ist ein subtiler Punkt, der weiter unten ein eigenes Beispiel bekommt.
Erstes Beispiel mit print_r
Zum Einstieg ein kleines Farben-Array, das die englischen Namen als Werte führt. Nach dem Aufruf von PHP array_flip() sind die englischen Namen die Schlüssel, und die deutschen Bezeichner stehen als Werte.
<?php
$farben = ['rot' => 'red', 'gruen' => 'green', 'blau' => 'blue'];
print_r($farben);
/* Array ( [rot] => red [gruen] => green [blau] => blue ) */
print_r(array_flip($farben));
/* Array ( [red] => rot [green] => gruen [blue] => blau ) */
Das Ergebnis ist ein neues Array. Das Original bleibt unverändert, weil PHP array_flip() das Array nicht per Referenz übernimmt. Wer die Vertauschung in-place braucht, weist das Resultat einfach derselben Variable zu. Im nächsten Schritt geht es um die wichtigste produktive Anwendung dieser Funktion.
Lookup-Optimierung statt in_array
Die häufigste produktive Anwendung von PHP array_flip() ist die Beschleunigung von Membership-Prüfungen. in_array() durchsucht ein Array linear, die Laufzeit wächst also mit der Größe der Liste. Wer den Lookup häufig wiederholt, gewinnt durch den Tausch zu einer assoziativen Map deutlich an Geschwindigkeit, weil isset() in O(1) arbeitet.
<?php
$erlaubt = ['admin', 'editor', 'leser', 'gast', 'moderator'];
$lookup = array_flip($erlaubt);
$rolle = 'editor';
if (isset($lookup[$rolle])) {
echo 'Rolle erlaubt';
}
/* Vergleich, langsam bei grossen Listen:
if (in_array($rolle, $erlaubt, true)) { ... } */
Bei wenigen Einträgen ist der Unterschied vernachlässigbar, bei Listen mit tausenden Einträgen aber dramatisch. Wichtig ist, den Tausch nur einmal zu Beginn der Schleife zu machen und nicht bei jeder Iteration. Wer die erlaubten Werte aus einer Konstante oder einem Cache lädt, kann die Lookup-Map gleich vorab anlegen.
Stolperfalle doppelte Werte
Eine subtile Falle entsteht, wenn das Eingabe-Array doppelte Werte enthält. Da ein Array nur eindeutige Schlüssel haben kann, überschreibt jeder spätere Eintrag den früheren. Die Konsequenz ist Datenverlust, wenn man das nicht vorher berücksichtigt.
<?php
$daten = ['a' => 1, 'b' => 1, 'c' => 2];
print_r(array_flip($daten));
/* Array ( [1] => b [2] => c ) */
Im obigen Beispiel ist der ursprüngliche Schlüssel 'a' mit dem Wert 1 verloren, weil er von 'b' => 1 überschrieben wurde. Wer doppelte Werte haben kann, sollte vor dem Aufruf eine Prüfung mit array_count_values() durchführen oder die Daten anders modellieren. In Whitelist-Szenarien sind doppelte Werte allerdings unkritisch, weil sie sowieso nur einmal als Schlüssel erscheinen sollen.
Erlaubte Wert-Typen und Warning
PHP array_flip() akzeptiert nur skalare Werte als künftige Schlüssel, also Strings und Integer. Float-Werte werden zu Integer gecastet, Booleans zu 0 oder 1. Werte vom Typ Array oder Objekt werden übersprungen, und PHP wirft ein E_WARNING.
<?php
$daten = [
'a' => 'x',
'b' => ['y'], /* Array, nicht erlaubt */
'c' => 'z',
'd' => 3.7, /* wird zu Integer 3 */
'e' => true, /* wird zu 1 */
];
$flip = @array_flip($daten);
print_r($flip);
/* Array ( [x] => a [z] => c [3] => d [1] => e ) */
Das @ unterdrückt im Beispiel das Warning, sollte im Produktiv-Code aber vermieden werden. Besser ist es, die Daten vor dem Aufruf mit is_scalar() zu filtern oder die Quelle so zu modellieren, dass nur skalare Werte ankommen. Auch der Cast von Float zu Integer kann in Reporting-Szenarien zu unerwarteten Kollisionen führen, wenn 3.0 und 3.7 plötzlich denselben Schlüssel 3 belegen.
flowchart TD
A[Eingabe-Array] --> B{Werte skalar?}
B -->|Ja| C[Wert wird Schluessel]
B -->|Nein| D[Warning, Eintrag uebersprungen]
C --> E{Wert doppelt?}
E -->|Nein| F[Eintrag uebernehmen]
E -->|Ja| G[Letzter gewinnt]
Multidimensionale Arrays
PHP array_flip() arbeitet nur auf flachen Arrays. Wer ein verschachteltes Array vertauschen will, kombiniert die Funktion mit array_map() und ruft den Tausch für jede Untergruppe einzeln auf. Diese Pipeline ist sehr knapp und vermeidet eine geschachtelte Schleife.
<?php
$gruppen = [
'team1' => ['anna' => 1, 'ben' => 2],
'team2' => ['cara' => 3, 'dirk' => 4],
];
$flipped = array_map('array_flip', $gruppen);
print_r($flipped);
/* Array (
[team1] => Array ( [1] => anna [2] => ben )
[team2] => Array ( [3] => cara [4] => dirk )
) */
Das Pattern funktioniert beliebig tief verschachtelt, allerdings nur mit array_map auf der jeweils richtigen Ebene. Wer wirklich rekursiv tauschen muss, schreibt eine kleine Helper-Funktion, die jeden Knoten besucht und nur die Blätter vertauscht.
Vergleich array_flip, array_search, array_combine
Im Code-Bestand großer Projekte gibt es drei verwandte Funktionen, die oft verwechselt werden. PHP array_flip() vertauscht Schlüssel und Werte eines Arrays. array_search() sucht den Schlüssel zu einem bestimmten Wert. array_combine() baut aus zwei Arrays ein neues, in dem das erste die Schlüssel und das zweite die Werte liefert.
Wer einmalig den Schlüssel zu einem Wert sucht, nimmt array_search. Wer dieselbe Suche oft wiederholt, baut sich mit array_flip eine Lookup-Map. Wer aus zwei Arrays ein neues bauen will, nimmt array_combine. Diese drei Werkzeuge ergänzen sich und decken zusammen die meisten Mapping-Aufgaben in PHP ab.
Best Practices im Code-Review
Im Code-Review lohnt es sich, drei Punkte zu prüfen. Erstens, ob die Werte des Eingabe-Arrays garantiert skalar sind. Wenn nicht, gehört ein Filter mit array_filter('is_scalar') davor. Zweitens, ob doppelte Werte vorkommen können und ob das gewollt ist. Drittens, ob die Lookup-Map nur einmal gebaut wird und nicht in jeder Schleifeniteration neu. Wer diese drei Punkte verinnerlicht, vermeidet die typischen Bugs mit PHP array_flip() im Junior-Code.
Wer ein Performance-Problem mit in_array() hat und auf array_flip plus isset umstellen will, sollte das mit einem kleinen Benchmark belegen. Bei Listen unter 50 Einträgen ist der Unterschied selten messbar. Bei Listen mit mehreren tausend Werten dagegen sind Faktor-100-Verbesserungen realistisch.
Fazit
PHP array_flip() ist eine kompakte Funktion, die Schlüssel und Werte eines Arrays tauscht und dabei eine sehr nützliche Performance-Optimierung ermöglicht. Sie glänzt vor allem als Bauer von Lookup-Maps, ersetzt langsame in_array-Suchen durch schnelle isset-Prüfungen und ist gleichzeitig eine bequeme Helper-Funktion für kleinere Konvertierungen. Wer doppelte Werte im Auge behält und nur skalare Werte übergibt, hat mit array_flip() einen zuverlässigen Helfer im Werkzeugkasten.