Aktueller Standort: Startseite> Neueste Artikel> Wie man ein Array von Enum -Werten mit Array_flip () elegant umkehrt) umgekehrt

Wie man ein Array von Enum -Werten mit Array_flip () elegant umkehrt) umgekehrt

M66 2025-06-03

Bei der täglichen PHP -Entwicklung begegnen wir häufig gegenseitige Konvertierung zwischen "Aufzählungswerten? Tags". Zum Beispiel eine Reihe von Bestellstatus:

 $statusMap = [
    0 => 'Bezahlt werden',
    1 => 'Bezahlt',
    2 => 'Versendet',
    3 => 'Vollendet',
];

Diese Struktur erleichtert die Extraktion entsprechender Textbeschreibungen aus dem Statuscode. Manchmal müssen wir aber auch umgekehrt arbeiten, z. B. den entsprechenden Statuscode 2 basierend auf "Versand". Wenn es zu diesem Zeitpunkt keine zusätzliche strukturelle Unterstützung gibt, müssen Sie möglicherweise das gesamte Array durchqueren und eine ähnliche Logik schreiben:

 function getStatusCode($label) {
    foreach ($statusMap as $code => $desc) {
        if ($desc === $label) {
            return $code;
        }
    }
    return null;
}

Es sieht ein bisschen langatmedig aus. Zu diesem Zeitpunkt ist die mit PHP ausgestattete Funktion array_flip () nützlich!

Was ist Array_flip () ?

Array_flip () ist eine integrierte Funktion in PHP, mit der die "Schlüssel" und die Werte eines Arrays gekoppelt werden:

 array_flip(array $array): array

Anmerkungen:

  • Der Wert des Arrays muss eindeutige und skalare Werte sein, die als Schlüssel (z. B. Zeichenfolgen oder Ganzzahlen) verwendet werden können.

  • Wenn es doppelte Werte gibt, überschreibt das Folgende die vorherige.

Verwenden Sie Array_flip () , um die Inversion des Enumswerts zu implementieren

Schauen wir uns an, wie Sie eine Reihe von Enum -Werten anmutig umkehren können:

 $statusMap = [
    0 => 'Bezahlt werden',
    1 => 'Bezahlt',
    2 => 'Versendet',
    3 => 'Vollendet',
];

$labelToCodeMap = array_flip($statusMap);

echo $labelToCodeMap['Versendet']; // Ausgabe 2

Ist es in einem Augenblick viel einfacher? Nur einmal dauert Array_flip () , um eine Zuordnungstabelle von "Label" zu "Wert" zu erhalten.

Praktischer Fall: Formen-Option Option Value Conversion

Angenommen, Sie haben eine Aufzählung von Benutzer geschlechtsspezifischen Optionen:

 $genderMap = [
    'M' => 'männlich',
    'F' => 'weiblich',
    'O' => 'andere',
];

Bei der Senden des Formulars wählt der Benutzer "weiblich" aus, die Sie in "F" zurückkehren und in der Datenbank speichern möchten:

 $input = 'weiblich';
$labelToValue = array_flip($genderMap);
$genderCode = $labelToValue[$input] ?? null;

if ($genderCode === null) {
    echo "Illegaler Geschlechtswert";
} else {
    // Angenommen, es wird in der Datenbank gespeichert
    saveGenderToDB($genderCode);
}

Der Code ist nicht nur kompakter, sondern die Logik ist auch sehr klar und leicht zu verstehen.

Tipps für die Verwendung: Cache Inverted Array

Wenn Sie invertierte Arrays an mehreren Stellen verwenden müssen, können Sie auch eine gemeinsame Methode in Ihrem Projekt definieren:

 function getFlippedMap(array $map): array {
    static $cache = [];

    $hash = md5(json_encode($map));
    if (!isset($cache[$hash])) {
        $cache[$hash] = array_flip($map);
    }

    return $cache[$hash];
}

Auf diese Weise können die vorhandenen Inversionsergebnisse auch dann wiederverwendet werden, um die Leistung zu verbessern.

Hinweis: Die Werte müssen eindeutig sein

Denken Sie daran, dass Array_flip () den vorherigen Schlüssel automatisch überschreibt, wenn die Werte im ursprünglichen Array nicht eindeutig sind:

 $arr = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'apple',
];

print_r(array_flip($arr));

Die Ausgabe wird sein:

 Array
(
    [banana] => b
    [apple] => c // 'a' Bedeckt
)

Dies kann bei der Bearbeitung von Enum -Werten Fehler verursachen. Daher wird empfohlen, um sicherzustellen, dass die Werte vor der Inversion eindeutig sind.

Zusammenfassung

Array_flip () ist eine kleine, aber sehr praktische Funktion, insbesondere für schnelle Konvertierungen zwischen "Etikett? Werten". Dadurch können wir PHP -Code prägnanter, leichter zu lesen und weniger Fehler machen. Wenn Sie das nächste Mal eine Schleife schreiben, können Sie auch darüber nachdenken: Können Sie Array_flip () verwenden, um sie in einem Schritt zu erhalten?