Aktueller Standort: Startseite> Neueste Artikel> Wie kann die Natsort -Funktion beim Sortieren verhindern, dass der ursprüngliche Schlüsselwert eines Arrays geändert wird?

Wie kann die Natsort -Funktion beim Sortieren verhindern, dass der ursprüngliche Schlüsselwert eines Arrays geändert wird?

gitbox 2025-08-30

In PHP ist die Natsort -Funktion eine häufig verwendete Sortierungsmethode, die Elemente in einem Array in "natürlicher Reihenfolge" sortiert. Diese Sortiermethode kann eher mit menschlichen Lesegewohnheiten übereinstimmen, wie z. Wenn Sie jedoch mit Natsort sortiert werden, können Sie jedoch auf ein Problem stoßen - es setzt den Schlüsselwert des Arrays zurück, wodurch der ursprüngliche Schlüsselwert verloren geht. Dies kann es schwierig machen, auf Daten zuzugreifen, die auf dem ursprünglichen Schlüsselwert in nachfolgenden Vorgängen basieren.

In diesem Artikel wird erläutert, wie Natsort vermieden wird, den ursprünglichen Schlüsselwert eines Arrays zu ändern, und einige verwandte Tipps und Alternativen einführt.

Natsort und seine Auswirkungen

Die Funktion der Natsort -Funktion besteht darin, Arrays basierend auf "natürlicher Reihenfolge" zu sortieren. Die sogenannte natürliche Ordnung sortiert bezieht sich auf Sortierzahlen nach ihrer Größe beim Sortieren, anstatt sie in Wörterbuchreihenfolge der Saiten zu sortieren. Zum Beispiel:

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a10'</span></span><span>, </span><span><span class="hljs-string">'a2'</span></span><span>, </span><span><span class="hljs-string">'a1'</span></span><span>, </span><span><span class="hljs-string">'a20'</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">natsort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

Nach der Ausführung des obigen Codes lautet das Ausgabeergebnis wie folgt:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; a1
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; a2
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; a10
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; a20
)
</span></span>

Wie Sie sehen können, sortiert Natsort das Array nach der Größe der Zahl, setzt jedoch den Schlüsselwert des Arrays zurück, so dass die mit dem Element bezogenen Originalschlüssel nicht mehr erhalten bleiben.

Wie man einen Schlüsselwertverlust verhindern

Wenn Sie den ursprünglichen Schlüsselwert bei der Verwendung von Natsort beibehalten möchten, können Sie vor dem Sortieren den Schlüsselwert des ursprünglichen Arrays speichern und dann das sortierte Array wieder aufbauen. Dies stellt sicher, dass der Sortierprozess den ursprünglichen Schlüsselwert nicht beeinflusst.

Methode 1: Verwenden Sie Array_Values ​​und Natsort

Sie können sortieren, indem Sie die Werte des Arrays extrahieren und den Schlüsselwert unverändert lassen. Dies wird durch die Funktion array_values ​​erreicht. Die spezifische Methode besteht darin, den ursprünglichen Schlüsselwert zuerst zu behalten und dann zu sortieren:

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-string">'a10'</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-string">'a2'</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-string">'a1'</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-string">'a20'</span></span><span>];

</span><span><span class="hljs-comment">// Speichern Sie den ursprünglichen Schlüsselwert</span></span><span>
</span><span><span class="hljs-variable">$original_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);

</span><span><span class="hljs-comment">// Natürlich sortieren Sie Werte</span></span><span>
</span><span><span class="hljs-title function_ invoke__">natsort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);

</span><span><span class="hljs-comment">// Stellen Sie den ursprünglichen Schlüsselwert wieder her</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_combine</span></span><span>(</span><span><span class="hljs-variable">$original_keys</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>);

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

Ausgangsergebnis:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [a] =&gt; a1
    [b] =&gt; a2
    [c] =&gt; a10
    [d] =&gt; a20
)
</span></span>

In diesem Ansatz wird der ursprüngliche Schlüsselwert zuerst von Array_Keys erhalten und dann wird das Array mit Natsort sortiert. Verwenden Sie nach Abschluss der Sortierung Array_combine , um die Korrespondenz zwischen dem Schlüsselwert und dem sortierten Wert wiederherzustellen.

Methode 2: Verwenden Sie UASORT , um die Sortierung anzupassen

Eine andere Möglichkeit besteht darin, die Uasort -Funktion für die benutzerdefinierte Sortierung zu verwenden. Ähnlich wie bei Natsort kann Uasort Arrays sortieren, ändert jedoch nicht den Schlüsselwert. Durch die Implementierung einer benutzerdefinierten Sortierfunktion können Sie die Sortiermethode steuern, während Sie den ursprünglichen Schlüsselwert beibehalten:

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-string">'a10'</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-string">'a2'</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-string">'a1'</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-string">'a20'</span></span><span>];

</span><span><span class="hljs-title function_ invoke__">uasort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>);
});

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

UASORT implementiert das Sortieren einer Rückruffunktion, bei der die STRNATCMP -Funktion intern verwendet wird, um die Sortiermethode der natürlichen Ordnung zu simulieren, ohne den Schlüsselwert des Arrays zu ändern.

Ausgangsergebnis:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [c] =&gt; a1
    [b] =&gt; a2
    [a] =&gt; a10
    [d] =&gt; a20
)
</span></span>

Zusammenfassen

Obwohl Natsort eine leistungsstarke Sortierfunktion ist, setzt sie den Schlüsselwert des Arrays zurück. Wenn Sie während des Sortierprozesses Schlüsselwerte aufbewahren müssen, können Sie eine von zwei Methoden verwenden:

  1. Speichern Sie zuerst den ursprünglichen Schlüsselwert und stellen Sie den Schlüsselwert nach der Sortierung durch Array_combine wieder her.

  2. Verwenden Sie die UASORT -Funktion für die benutzerdefinierte Sortierung, um einen Schlüsselwertverlust zu vermeiden.

Mit diesen beiden Methoden können Sie sicherstellen, dass das Array den ursprünglichen Schlüsselwert weiterhin unverändert halten kann, nachdem Sie auf natürliche Weise sortiert wurden, wodurch der Datenverlust während des Sortierprozesses vermieden wird.