Aktueller Standort: Startseite> Neueste Artikel> Häufige Missverständnisse: Direktarray_flip () Folgen von Benutzerdaten

Häufige Missverständnisse: Direktarray_flip () Folgen von Benutzerdaten

M66 2025-06-03

Bei der Behandlung von PHP -Arrays ist Array_flip () eine scheinbar einfache, aber versteckte Risikofunktion. Sein Zweck ist, aber wenn Sie sie direkt für von Benutzer bereitgestellte Daten verwenden, kann es eine Reihe von Problemen auslösen, die Sie nicht erwartet haben.

In diesem Artikel wird die potenziellen Fallstricke von Array_flip () anhand von Beispielen analysiert und sicherere Alternativen bieten, um robustere PHP -Anwendungen aufzubauen.

Was ist Array_flip () ?

Die grundlegende Verwendung von Array_flip () ist sehr intuitiv:

 $original = [
    'apple' => 'fruit',
    'carrot' => 'vegetable'
];

$flipped = array_flip($original);

print_r($flipped);

Ausgabe:

 Array
(
    [fruit] => apple
    [vegetable] => carrot
)

Es ändert den Wert in einen Schlüssel und den Schlüssel zu einem Wert. Dies ist in einigen Szenarien sehr nützlich, beispielsweise wenn Sie "Schlüssel" schnell auf "Werten" finden möchten. Das Problem ist jedoch auch in dieser Definition versteckt.

Frage 1: doppelte Werte in Benutzerdaten doppelte

Array_flip () verlangt, dass alle Werte beim Umdrehen eindeutig und entscheidend sein müssen. Wenn Sie in Ihrem Array doppelte Werte haben, überschreiben Sie die vorherigen Daten leise, ohne Fehleranforderungen anzugeben.

Schauen wir uns ein Beispiel für Benutzerdaten an:

 $userInput = [
    'user1' => 'admin',
    'user2' => 'editor',
    'user3' => 'admin' // Wert wiederholen
];

$flipped = array_flip($userInput);

print_r($flipped);

Die Ausgabe ist:

 Array
(
    [admin] => user3
    [editor] => user2
)

Glaubst du, Admin entspricht User1 ? Nein, User3 überschreibt es. Dies kann bei der Verarbeitung von Benutzerrollen, Berechtigungen, Tags und anderen Daten leicht logische Fehler verursachen.

Frage 2: Werte, die nicht als Schlüssel verfügbar sind (Nicht-Scalar)

Arrayschlüssel in PHP können nur Ganzzahlen oder Saiten sein. Wenn der vom Benutzer eingereichte Array ein Array oder Objekt als Werte enthält, wirft Array_flip () eine Warnung aus und ignoriert diese Elemente.

 $userInput = [
    'key1' => 'value1',
    'key2' => ['not' => 'allowed'],
    'key3' => 'value3'
];

$flipped = array_flip($userInput);

print_r($flipped);

Ausgabe:

 Warning: array_flip(): Can only flip STRING and INTEGER values!
Array
(
    [value1] => key1
    [value3] => key3
)

Diese Warnung kann in einer Entwicklungsumgebung gesehen werden, jedoch in einer Produktionsumgebung versteckt, und infolgedessen erhalten Sie ein Array, das normal aussieht, aber Daten gebrochen hat .

Frage 3: Unvorhersehbares Verhalten, das durch Änderung des Werttyps verursacht wird

Auch wenn die Werte gleich aussehen, unterscheidet Array_flip () die Typen streng. Beispielsweise werden die Zeichenfolge "1" und die Ganzzahl 1 als der gleiche Schlüssel behandelt, der zu Überschreibungen führt.

 $userInput = [
    'a' => 1,
    'b' => '1'
];

$flipped = array_flip($userInput);

print_r($flipped);

Ausgabe:

 Array
(
    [1] => b
)

Der Schlüssel "A" ist völlig verloren.

Sicherere Alternativen

Wenn Sie die Funktion von Back-Checing-Schlüssel aus Werten benötigen, die Datenquelle jedoch nicht vertrauenswürdig ist, können Sie die folgende Methode verwenden:

Methode 1: Sammeln Sie alle Schlüsselwertpaare

 $reverseMap = [];
foreach ($userInput as $key => $value) {
    if (is_scalar($value)) {
        $reverseMap[$value][] = $key;
    }
}

Auf diese Weise können die Schlüssel, die allen doppelten Werten entsprechen, beibehalten werden:

 print_r($reverseMap);

Ausgabe:

 Array
(
    [admin] => Array ( [0] => user1 [1] => user3 )
    [editor] => Array ( [0] => user2 )
)

Zusammenfassung: Die Verwendung von Array_flip () erfordert extreme Pflege

Array_flip () ist bei der Behandlung von sauberen, gut strukturierten internen Daten sehr nützlich, verwenden Sie diese jedoch mit Vorsicht für Benutzereingaben, es sei denn, Sie können:

  • Stellen Sie sicher, dass der Wert eindeutig ist

  • Stellen Sie sicher, dass der Wert eines Skalartyps (Zeichenfolge oder Ganzzahl) ist.

  • Kennen Sie Ihren Flip -Zweck klar und seien Sie bereit, Ausnahmen zu handhaben

Andernfalls können Sie in einer Ecke stillschweigend Fehler einführen, und bis der Benutzer sich eines Tages über Berechtigungsfehler im Forum beschwert, ist der Schuldige die Linie harmloser Array_flip () .

Ich hoffe, dieser Artikel kann Ihnen helfen, eine versteckte, aber gefährliche Grube zu vermeiden. Wenn Sie eine Funktion des Berechtigungsmanagementsystems oder einer Datenzuordnung entwickeln, können Sie auch Array_flip () vorübergehend herunterlegen und eine robustere Lösung in Betracht ziehen!

Für weitere Studien überprüfen Sie bitte:
? https://m66.net/php-manual/array_flip
? https://m66.net/php-beest-practices

Wenn Sie ähnliche Verwendungsfragen haben, überlassen Sie bitte eine Nachricht, um zu diskutieren. Obwohl die Welt von PHP alt ist, gibt es einen Teufel, der im Detail versteckt ist?