Aktueller Standort: Startseite> Neueste Artikel> Ist die Array -Länge nach Verwendung von Array_flip () kleiner? Es kann durch wiederholte Werte verursacht werden

Ist die Array -Länge nach Verwendung von Array_flip () kleiner? Es kann durch wiederholte Werte verursacht werden

M66 2025-06-03

In PHP ist Array_flip () eine sehr praktische Funktion, und seine Funktion ist. Mit anderen Worten, der Wert im ursprünglichen Array wird zu einem neuen Schlüssel, und der ursprüngliche Schlüssel wird zum entsprechenden Wert.

Sie können jedoch feststellen, dass die Länge des Arrays nach Verwendung von Array_flip () kleiner wird. Warum ist das? Liegt es daran, dass der ursprüngliche Wert eine Duplikation gibt? Die Antwort lautet: Ja, genau das liegt, dass der Wert wiederholt wird!

1. Schauen Sie sich ein einfaches Beispiel an

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

$flipped = array_flip($original);

print_r($flipped);

Ausgangsergebnis:

 Array
(
    [banana] => b
    [apple] => c
)

Wie Sie sehen können, hatte das $ Original -Array ursprünglich drei Elemente, aber das $ Fliped Array hatte nur zwei. Warum überschreibt 'Apple' => C 'Apple' => a ?

2. Interner Mechanismus von Array_flip ()

Array_flip () erfordert, dass der Wert im Array von einem Typ sein muss, der als Schlüssel, dh eine Zeichenfolge oder eine Ganzzahl verwendet werden kann . Wenn Sie umdrehen, wenn es zwei Schlüssel gibt, die dem gleichen Wert entsprechen, überschreibt letztere das erstere .

Im obigen Beispiel:

  • 'a' => 'Apple''Apple' => a

  • 'C' => 'Apple''Apple' => C (überschreibt das ursprüngliche 'Apple' => a )

Daher wird nur 'Apfel' => C im umgedrehten Array aufbewahrt, wodurch sich die Arraylänge abnimmt.

3. Wie kann man dieses Problem vermeiden?

Wenn Sie alle Zuordnungsbeziehungen bewahren müssen, können Sie die Zuordnungswerte in Arrays in Betracht ziehen und manuell behandeln:

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

$flipped = [];

foreach ($original as $key => $value) {
    if (!isset($flipped[$value])) {
        $flipped[$value] = [];
    }
    $flipped[$value][] = $key;
}

print_r($flipped);

Ausgabe:

 Array
(
    [apple] => Array
        (
            [0] => a
            [1] => c
        )

    [banana] => Array
        (
            [0] => b
        )
)

Auf diese Weise können Sie alle wichtigen Informationen behalten und das Problem vermeiden, überschrieben zu werden.

4. Beispiele für praktische Anwendungsszenarien

Angenommen, Sie führen einen URL-Short-Link-Service (z. B. https://m66.net/abc123 ) durch. Möglicherweise haben Sie eine Reihe von Original-Links und deren kurzen Codes:

 $links = [
    'abc123' => 'https://m66.net/page1',
    'def456' => 'https://m66.net/page2',
    'ghi789' => 'https://m66.net/page1',
];

$reverse = array_flip($links);
print_r($reverse);

Im Ergebnis wird https://m66.net/page1 die Zuordnung nur einmal (wahrscheinlich 'GHI789' ) beibehalten, und der vorherige 'ABC123' wird überschrieben. Dies wirkt sich auf Ihre kurzkettige Gegenprüfung aus.

Wenn Sie also in praktischen Anwendungen die kurzen Links revers überprüfen möchten, müssen Sie feststellen, ob es doppelte Werte gibt, und die entsprechende Datenstruktur auswählen.

Zusammenfassen

  • Array_flip () tauschte die Schlüssel und Werte des Arrays austauschend.

  • Wenn im ursprünglichen Array doppelte Werte vorhanden sind, bleibt nur der letzte nach dem Flippen und der vorherige überschrieben.

  • Diese Situation wird dazu führen , dass das Array kleiner ist .

  • Wenn Sie alle Zuordnungsbeziehungen beibehalten müssen, können Sie das Array manuell erstellen, wobei die Werte dem Array entsprechen.

Wenn Sie diese Funktion verstehen, können Sie Datenverlust beim Schreiben von PHP -Programmen vermeiden. Ich hoffe, dieser Artikel kann Ihnen helfen, das Verhalten von Array_flip () klarer zu verstehen!