Aktueller Standort: Startseite> Neueste Artikel> Der Wert von array_flip () muss eine Zeichenfolge oder eine Ganzzahl sein, warum?

Der Wert von array_flip () muss eine Zeichenfolge oder eine Ganzzahl sein, warum?

M66 2025-06-03

In der PHP -Entwicklung ist Array_flip () eine sehr häufige Funktion, die Tasten und Werte von Arrays austauschen kann. Die Syntax dieser Funktion ist sehr einfach, aber bei Verwendung gibt es eine bemerkenswerte Grenze: Andernfalls meldet Array_flip () einen Fehler oder ignoriert automatisch illegale Werte.

Warum gibt es diese Einschränkung? Wir analysieren die Gründe und Einschränkungen aus mehreren Aspekten.

1. Grundnutzung von Array_flip ()

 $original = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$flipped = array_flip($original);

print_r($flipped);

Ausgabe:

 Array
(
    [red] => apple
    [yellow] => banana
)

Hier verwandelt Array_flip () erfolgreich 'rot' und 'gelb' in Schlüssel, da es sich um String -Typen handelt.

2. Warum können Schlüssel nur Saiten oder Ganzzahlen sein?

PHP -Arrays werden tatsächlich geordnet, und ihre Schlüssel können nur Ganzzahlen oder Saiten sein. Dies unterscheidet sich von einigen Sprachen vom Typ schwacher Typ und ist auch ähnlich, aber nicht genau das Gleiche wie der Objektschlüsselmechanismus von JavaScript.

Wenn Sie array_flip () ausführen, versucht PHP, den "Wert" des ursprünglichen Arrays als "Schlüssel" des Neuarrays zu behandeln. Wenn der Wert des ursprünglichen Arrays lautet:

  • String? Ja

  • Ganze Zahl? Ja

  • Boolesche, schwimmende Punktzahl, Array, Objekt, Null? Nicht als Schlüssel erlaubt

Zum Beispiel:

 $invalid = [
    'one' => true,
    'two' => [],
    'three' => new stdClass(),
    'four' => null,
];

$flipped = array_flip($invalid);

// Wird einen werfen warning:array_flip(): Can only flip STRING and INTEGER values!

3.. Probleme, die durch Typumwandlung verursacht werden

Auch wenn bestimmte Typen in Saiten oder Ganzzahlen wie boolesche Werte gegossen werden können ( TRUE wird 1 ), kann dies leicht zu Konflikten führen. Zum Beispiel:

 $array = [
    'a' => true,
    'b' => 1,
    'c' => '1'
];

$flipped = array_flip($array);

print_r($flipped);

Ausgabe:

 Array
(
    [1] => c
)

Es gab ursprünglich drei verschiedene Werte, aber alle "umgedreht" in denselben Schlüssel 1 , und die ersten beiden wurden überschrieben, und am Ende wurde nur der Punkt 'C' => 1 beibehalten.

Aus diesem Grund verlangt Array_flip () , dass der Wert von einem Typ sein muss, der als Schlüssel sicher sein kann, ansonsten kann ein Datenverlust oder ein Überschreiben auftreten.

4. Beispiele für praktische Anwendungsszenarien

Angenommen, Sie haben einen Ländercode für die Mapping von Ländernamen und möchten den Ländercode schnell durch den Ländernamen finden:

 $countryCodes = [
    'US' => 'United States',
    'FR' => 'France',
    'JP' => 'Japan'
];

$flipped = array_flip($countryCodes);

// Schnelle Suche:
$code = $flipped['Japan']; // Das Ergebnis ist 'JP'

In diesem Szenario ist die Verwendung von Array_flip () sehr effizient, und da der Wert eine Zeichenfolge ist, gibt es kein Typ.

5. Was ist, wenn der Wert nicht als Schlüssel verwendet werden kann?

Wenn Ihr Wert Arrays, Objekte oder andere Typen enthält, die nicht als Schlüssel verwendet werden können, können Sie die folgende Methode verwenden:

 $original = [
    'a' => 'cat',
    'b' => ['nested'],
    'c' => 'dog'
];

$filtered = array_filter($original, function($value) {
    return is_int($value) || is_string($value);
});

$flipped = array_flip($filtered);

print_r($flipped);

Oder verwenden Sie Try-Catch, um die Logik einzuwickeln (obwohl PHP keine Ausnahmen auswirft, Sie können sie mit benutzerdefinierter Logik steuern), um Fehler zu vermeiden.

Zusammenfassen

Die Entwurfsbeschränkung von Array_flip () spiegelt die Eigenschaften des PHP -Array selbst wider: Schlüssel können nur Ganzzahlen oder Zeichenfolgen sein . Diese Einschränkung soll die Vorhersehbarkeit und die Leistung von Schlüsseln gewährleisten und unerwartete Wertüberschreibungen vermeiden. Bei Verwendung von array_flip () wird empfohlen, zu überprüfen, ob der Wert im Array vom entsprechenden Typ ist, um sicherzustellen, dass der Vorgang sicher und zuverlässig ist.

Wenn Sie einige Conversions von Schlüsselwertpaaren aus URLs in Ihrem System bearbeiten müssen, können Sie dies so tun:

 $input = [
    'home' => 'https://m66.net/index',
    'about' => 'https://m66.net/about'
];

$flipped = array_flip($input);

print_r($flipped);

Ausgabe: