Aktueller Standort: Startseite> Neueste Artikel> Welche Probleme und Lösungen sollten beim Sortieren chinesischer Zeichen mithilfe der Natsort -Funktion geachtet werden?

Welche Probleme und Lösungen sollten beim Sortieren chinesischer Zeichen mithilfe der Natsort -Funktion geachtet werden?

gitbox 2025-09-12

In PHP wird die Natsort () -Funktion verwendet, um Arrays in natürlicher Reihenfolge zu sortieren. Sein Kernmerkmal besteht darin, Strings nach menschlichen kognitiven Gewohnheiten zu sortieren, anstatt nur nach Wörterbuchsortierungen. Natsort () ist normalerweise ideal für englische Charaktere, aber beim Sortieren von Inhalten sind wir möglicherweise auf unerwartete Sortierprobleme.

In diesem Artikel werden die Probleme untersucht, auf die Sie bei der Sortierung chinesischer Zeichen mithilfe von Natsort () begegnen und Lösungen bereitstellen können.

1. Häufige Probleme beim Sortieren chinesischer Charaktere in Natsort

  1. Chinesische Charaktere sortierten alphabetisch

    Natsort () versucht jedoch, Array -Elemente in der Wörterbuchreihenfolge zu sortieren, da chinesische Zeichen unterschiedlich von englischen Buchstaben codiert werden, vergleicht Natsort () Zeichen in ihren Unicode -Codierten, wenn sie Chinesisch verarbeiten, anstatt sie in der tatsächlichen chinesischen Reihenfolge zu sortieren. Daher können beim Sortieren chinesischer Charaktere, ähnlich wie "Zhang" und "Li", auftreten.

  2. Die chinesische Pinyin -Bestellung ist verwirrend

    Natsort () berücksichtigt die chinesische Pinyin -Reihenfolge oder andere Regeln für sprachliche Sortierung nicht automatisch. Dies bedeutet, dass zwei chinesische Charaktere offenbar in Natsort () eine offensichtliche Ordnung zu haben scheinen. Zum Beispiel können "Zhao" und "Geld" als "Geld" vorne und "Zhao" nach hinten sortiert werden.

2. So lösen Sie das Sortierproblem

Um chinesische Zeichen korrekt zu sortieren, können wir die folgenden Methoden verwenden, um Natsort () oder Alternativen zu optimieren.

1. Sortieren Sie mit dem Überbettungssorte (empfohlen)

Collator ist eine Klasse von PHP, die speziell für die sprachliche Sortierung verwendet wird und Zeichenfolgen nach bestimmten Regionen (Gebietsschema) sortieren kann. In einer chinesischen Umgebung können Sie die Auswirkung der Sortierung nach Pinyin erhalten, indem Sie geeignete Bereiche angeben. Hier ist ein Beispiel für die Verwendung der Collator -Klasse für die chinesische Sortierung:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$locale</span></span><span> = </span><span><span class="hljs-string">'zh_CN'</span></span><span>;  </span><span><span class="hljs-comment">// Richten Sie eine chinesische Umgebung ein</span></span><span>
</span><span><span class="hljs-variable">$collator</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Collator</span></span><span>(</span><span><span class="hljs-variable">$locale</span></span><span>);

</span><span><span class="hljs-comment">// Angenommen, es gibt ein chinesisches Array</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"Zhang San"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"Wang Wu"</span></span><span>, </span><span><span class="hljs-string">"Zhao liu"</span></span><span>, </span><span><span class="hljs-string">"Qian Qi"</span></span><span>];

</span><span><span class="hljs-comment">// verwenden Collator Sortieren</span></span><span>
</span><span><span class="hljs-variable">$collator</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">asort</span></span><span>(</span><span><span class="hljs-variable">$names</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$names</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Collator kann nach Pinyin -Order und nicht nur nach Unicode -Werten sortiert werden, sodass er Ergebnisse liefern, die eher den chinesischen Sortierregeln entsprechen.

2. Passen Sie die Sortierregeln an

Wenn der Collator einen bestimmten Bedarf nicht erfüllen kann oder wenn Sie die Sortierregeln (z. B. Sortieren gemäß einem bestimmten Pinyin oder einer anderen Bestellung) anpassen müssen, können Sie eine benutzerdefinierte Vergleichsfunktion schreiben. In Kombination mit der Usort () -Funktion können Sie chinesische Arrays flexibel sortieren. Zum Beispiel:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 自定义Sortieren函数,假设已知拼音或Sortieren规则</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">customSort</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-comment">// 根据拼音或其他规则进行Sortieren</span></span><span>
    </span><span><span class="hljs-variable">$pinyin_a</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getPinyin</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>);  </span><span><span class="hljs-comment">// Angenommen, es gibt eine Funktion, die sich in Pinyin umwandelt</span></span><span>
    </span><span><span class="hljs-variable">$pinyin_b</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getPinyin</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__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$pinyin_a</span></span><span>, </span><span><span class="hljs-variable">$pinyin_b</span></span><span>);
}

</span><span><span class="hljs-comment">// verwenden自定义Sortieren函数</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"Zhang San"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"Wang Wu"</span></span><span>, </span><span><span class="hljs-string">"Zhao liu"</span></span><span>, </span><span><span class="hljs-string">"Qian Qi"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$names</span></span><span>, </span><span><span class="hljs-string">'customSort'</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$names</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In diesem Beispiel ist Getpinyin () eine hypothetische Funktion, mit der chinesische Zeichen in Pinyin umgewandelt werden. Auf diese Weise können chinesische Charaktere nach Pinyin sortiert werden.

3. Kombinieren Sie Natsort () und andere Charaktercodierungskonvertierung

Obwohl Natsort () die Pinyin-Reihenfolge standardmäßig nicht berücksichtigt, können Sie in einigen Fällen zuerst chinesische Saiten in Pinyin (unter Verwendung von Bibliotheken von Drittanbietern wie Überaus \ pinyin ) umwandeln und sie dann durch Natsort () sortieren. Auf diese Weise können Sie chinesische Charaktere in Pinyin Order sortieren.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">require</span></span><span> </span><span><span class="hljs-string">'vendor/autoload.php'</span></span><span>;

</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">Overtrue</span></span><span>\</span><span><span class="hljs-title">Pinyin</span></span><span>\</span><span><span class="hljs-title">Pinyin</span></span><span>;

</span><span><span class="hljs-variable">$pinyin</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Pinyin</span></span><span>();

</span><span><span class="hljs-comment">// Angenommen, es gibt ein chinesisches Array</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"Zhang San"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"Wang Wu"</span></span><span>, </span><span><span class="hljs-string">"Zhao liu"</span></span><span>, </span><span><span class="hljs-string">"Qian Qi"</span></span><span>];

</span><span><span class="hljs-comment">// Chinesisch in Pinyin konvertieren</span></span><span>
</span><span><span class="hljs-variable">$names_pinyin</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$name</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">pinyin</span></span><span>) {
    </span><span><span class="hljs-title">return</span></span><span> $</span><span><span class="hljs-title">pinyin</span></span><span>-&gt;</span><span><span class="hljs-title">permalink</span></span><span>($</span><span><span class="hljs-title">name</span></span><span>);
}, </span><span><span class="hljs-variable">$names</span></span><span>);

</span><span><span class="hljs-comment">// verwenden natsort Sortieren拼音</span></span><span>
</span><span><span class="hljs-title function_ invoke__">natsort</span></span><span>(</span><span><span class="hljs-variable">$names_pinyin</span></span><span>);

</span><span><span class="hljs-comment">// 输出Sortieren后的中文</span></span><span>
</span><span><span class="hljs-variable">$sorted_names</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$names_pinyin</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">$sorted_names</span></span><span>[] = </span><span><span class="hljs-variable">$names</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">$sorted_names</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Hier verwenden wir zuerst Overtue \ Pinyin , um chinesische Zeichen in Pinyin umzuwandeln und den Pinyin durch Natsort () zu sortieren und dann die Reihenfolge der ursprünglichen chinesischen Zeichen nach dem Pinyin wiederherzustellen.

3. Zusammenfassung

Obwohl Natsort () eine sehr leistungsstarke Funktion ist, die Arrays in natürlicher Reihenfolge sortieren kann, kann seine Leistung unsere Bedürfnisse beim Umgang mit chinesischen Charakteren häufig nicht erfüllen. Um dieses Problem zu lösen, können Sie wählen:

  1. Mit der Collator -Klasse kann sie nach chinesischem Pinyin sortiert werden.

  2. Schreiben Sie benutzerdefinierte Sortierfunktionen mit vollständiger Kontrolle über Sortierlogik.

  3. Kombinieren Sie die Natsort () und die Pinyin Conversion Library, konvertieren Chinesisch zu Pinyin zuerst und sortieren.

Verschiedene Lösungen passen sich an unterschiedliche Bedürfnisse an. Entwickler können die am besten geeignete Lösung gemäß den tatsächlichen Bedingungen zur Sortierung chinesischer Zeichen auswählen.