Aktueller Standort: Startseite> Neueste Artikel> [Wie vermeiden Sie Schlüsselwertkonflikte, wenn Sie die Funktion array_flip in PHP verwenden? 】

[Wie vermeiden Sie Schlüsselwertkonflikte, wenn Sie die Funktion array_flip in PHP verwenden? 】

gitbox 2025-09-12

[Wie vermeiden Sie Schlüsselwertkonflikte, wenn Sie die Funktion array_flip in PHP verwenden? 】

In PHP ist die Funktion array_flip ein sehr nützliches Werkzeug, das Schlüssel und Werte in einem Array austauscht. Einfach ausgedrückt wird Array_flip den Schlüssel des Arrays als neuer Wert und den Wert als neuer Schlüssel nimmt und ein neues Array zurückgibt. Zum Beispiel:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

Die Ausgabe wird sein:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; b
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; c
)
</span></span>

Bei Verwendung der Funktion array_flip können Sie jedoch auf Schlüsselwertkonflikte stoßen. Dies liegt daran, dass die Arrayschlüssel in PHP einzigartig sind. Wenn im ursprünglichen Array doppelte Werte vorhanden sind, erfolgt der Schlüsselwertkonflikt nach der Inversion. Standardmäßig überschreibt Array_Flip die doppelten Werte, was zu einem gewissen Datenverlust führt.

Beispiel für Schlüsselwertkonflikte

Betrachten Sie das folgende Beispiel:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

Das Ausgabeergebnis ist wie folgt:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c
)
</span></span>

In diesem Beispiel gibt es zwei Elemente mit einem Wert von 2 im ursprünglichen Array ( 'B' => 2 und 'C' => 2 ). Nach dem Aufrufen von Array_flip wird der Wert 2 durch C überschrieben, was dazu führt, dass 'B' => 2 verloren geht.

Wie vermeiden Sie Schlüsselwertkonflikte?

Um dieses Problem zu lösen, können wir eine Verarbeitung durchführen, bevor wir das Array invertiert, um sicherzustellen, dass die Daten nicht verloren gehen. Hier sind einige häufig verwendete Methoden:

1. Verwenden Sie den Wert des Arrays als neue Schlüssel und fügen Sie zusätzliche Informationen hinzu

Eine übliche Praxis besteht darin, widersprüchliche Schlüsselwerte in ein Array oder eine Zeichenfolge zu kombinieren, so dass jeder neue Schlüssel eindeutig wird. Wenn die Werte im ursprünglichen Array beispielsweise gleich sind, können wir die ursprüngliche Bindung als neuer Schlüssel zu einem Array kombinieren:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
        </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = </span><span><span class="hljs-variable">$key</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-comment">// Wenn der Schlüsselwert Konflikte,Führen Sie alte Schlüssel und neue Schlüssel in ein Array zusammen</span></span><span>
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>])) {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>][] = </span><span><span class="hljs-variable">$key</span></span><span>;
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] = [</span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>], </span><span><span class="hljs-variable">$key</span></span><span>];
        }
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

Ausgabe:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; Array
        (
            [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; b
            [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; c
        )
)
</span></span>

In diesem Beispiel befassen wir uns mit Schlüsselwertkonflikten durch Arrays, damit jeder doppelte Wert nicht verloren geht, sondern die doppelten Schlüssel miteinander kombiniert.

2. Verwenden Sie Array_Count_Values , um die Anzahl der Vorkommen von Werten zu berechnen

Wenn wir nicht doppelte Schlüssel zusammenführen möchten, sondern wissen möchten, wie oft jeder Wert im ursprünglichen Array erscheint, können wir die Funktion array_count_values ​​verwenden. Durch diese Methode können wir die invertierten Schlüsselwerte verarbeiten, um Konflikte zu vermeiden:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$flipped</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-variable">$countedValues</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_count_values</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$flipped</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$countedValues</span></span><span>[</span><span><span class="hljs-variable">$value</span></span><span>] &gt; </span><span><span class="hljs-number">1</span></span><span>) {
        </span><span><span class="hljs-variable">$flipped</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$value</span></span><span> . </span><span><span class="hljs-string">'_'</span></span><span> . </span><span><span class="hljs-variable">$key</span></span><span>; </span><span><span class="hljs-comment">// Fusionschlüssel und Originalschlüssel zusammenführen</span></span><span>
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$flipped</span></span><span>);
</span></span>

Ausgabe:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; a
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; c_2
)
</span></span>

Diese Methode fügt jedem Schlüssel eine eindeutige Bezeichnung hinzu, wenn die Schlüsselkonflikte (z. B. der ursprüngliche Schlüssel), um sicherzustellen, dass keine Daten verloren gehen.

3. Verwenden Sie JSON Coding als Schlüssel

Eine andere Möglichkeit besteht darin, die doppelten Werte in eine JSON -Zeichenfolge umzuwandeln, damit jeder Wert eindeutig wird:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];

</span><span><span class="hljs-variable">$newArray</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$arr</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-variable">$newArray</span></span><span>[</span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)] = </span><span><span class="hljs-variable">$key</span></span><span>;
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$newArray</span></span><span>);
</span></span>

Ausgabe:

 <span><span><span class="hljs-title class_">Array</span></span><span>
(
    [</span><span><span class="hljs-string">"1"</span></span><span>] =&gt; a
    [</span><span><span class="hljs-string">"2"</span></span><span>] =&gt; c
)
</span></span>

Dieser Ansatz ist geeignet, wenn Sie den ursprünglichen Wert in eine nicht wiederholbare und eindeutige Datenstruktur umwandeln müssen.

Zusammenfassen

Das Vermeiden von Schlüsselwertkonflikten ist eine häufigste Herausforderung bei der Verwendung der Funktion array_flip . Wenn Ihre Array -Werte wiederholt werden können, gibt es einige Strategien, um sicherzustellen, dass Daten nicht verloren gehen. Zu den allgemeinen Methoden gehören das Zusammenführen von doppelten Schlüssel in Arrays, die Verarbeitung durch Zählen von Werten oder das Codieren jedes von JSON eindeutigen Schlüssels. Die Auswahl der richtigen Strategie hängt von Ihren spezifischen Anforderungen und dem Szenario der Datenverarbeitung ab.