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!
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.
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.
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.
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.
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.
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?