현재 위치: > 최신 기사 목록> Natsort 기능을 사용하여 중국어를 정렬 할 때 어떤 문제와 솔루션에주의를 기울여야합니까?

Natsort 기능을 사용하여 중국어를 정렬 할 때 어떤 문제와 솔루션에주의를 기울여야합니까?

gitbox 2025-09-12

PHP에서 Natsort () 함수는 배열을 자연 순서대로 정렬하는 데 사용됩니다. 그것의 핵심 특징은 단순히 사전 분류보다는 인간인지 습관에 따라 현을 분류하는 것입니다. Natsort () 는 일반적으로 영어 문자에게 이상적이지만 컨텐츠 정렬이 한자 일 때 예기치 않은 정렬 문제가 발생할 수 있습니다.

이 기사는 Natsort ()를 사용하여 한자를 정렬 할 때 발생할 수있는 문제를 탐색하고 솔루션을 제공합니다.

1. Natsort에서 한자를 정렬 할 때 일반적인 문제

  1. 한자는 알파벳순으로 분류했습니다

    그러나 Natsort ()는 배열 요소를 사전 순서로 정렬하려고 시도합니다. 그러나 한자는 영어 문자와 다르게 인코딩되기 때문에 Natsort ()는 중국어를 실제 중국 순서로 정렬하지 않고 중국어를 처리 할 때 유니 코드 인코딩 된 값의 문자를 비교합니다. 따라서 "Zhang"및 "Li"와 유사한 한자를 정렬 할 때 나타날 수 있습니다.

  2. 중국의 피니 인 명령은 혼란 스럽다

    Natsort ()는 자동으로 중국 Pinyin Order 또는 기타 언어 분류 규칙을 고려하지 않습니다. 이것은 두 중국어가 명백한 순서를 가지고있는 것처럼 보이더라도 Natsort () 에서 완전히 다르게 행동 할 수 있음을 의미합니다. 예를 들어, "Zhao"와 "Money"는 앞에 "돈"으로, "zhao"로 분류 될 수 있습니다.

2. 분류 문제를 해결하는 방법

한자를 올바르게 정렬하려면 다음 방법을 사용하여 Natsort () 또는 대안을 최적화 할 수 있습니다.

1. Collarator 사용 정렬 (권장)

Collator 는 PHP가 제공하는 클래스로, 언어 분류에 특별히 사용되며 특정 영역 (로케일)에 따라 문자열을 분류 할 수 있습니다. 중국 환경에서는 적절한 영역을 지정하여 Pinyin의 분류 효과를 얻을 수 있습니다. 다음은 중국 분류에 Collator 클래스를 사용하는 예입니다.

 <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">// 중국 환경을 설정하십시오</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">// 중국어 배열이 있다고 가정합니다</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"장 산"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"왕 우"</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">// 사용 Collator 종류</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는 유니 코드 값뿐만 아니라 Pinyin 순서에 따라 정렬 할 수 있으므로 중국 분류 규칙에 더 적합한 결과를 제공 할 수 있습니다.

2. 정렬 규칙을 사용자 정의하십시오

Collator가 특정 요구를 충족 할 수 없거나 정렬 규칙을 사용자 정의 해야하는 경우 (특정 Pinyin 또는 기타 주문에 따라 정렬) 사용자 정의 비교 함수를 작성할 수 있습니다. USORT () 함수와 결합하여 중국어 배열을 유연하게 정렬 할 수 있습니다. 예를 들어:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 自定义종류函数,假设已知拼音或종류规则</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">// 根据拼音或其他规则进行종류</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">// Pinyin으로 변환하는 함수가 있다고 가정합니다</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">// 사용自定义종류函数</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"장 산"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"왕 우"</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>

이 예에서 GetPinyin ()은 한자를 Pinyin으로 전환하는 데 사용되는 가상 기능입니다. 이런 식으로 Pinyin에 따라 한자를 분류 할 수 있습니다.

3. Natsort () 와 다른 문자 인코딩 변환을 결합합니다

Natsort () 는 기본적으로 Pinyin 순서를 고려하지 않지만 경우에 따라 중국어 문자열을 먼저 Pinyin ( Overtrue \ Pinyin 과 같은 타사 라이브러리 사용)으로 변환 한 다음 Natsort () 를 통해 정렬 할 수 있습니다. 이렇게하면 중국어를 Pinyin 순서로 정렬 할 수 있습니다.

 <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">// 중국어 배열이 있다고 가정합니다</span></span><span>
</span><span><span class="hljs-variable">$names</span></span><span> = [</span><span><span class="hljs-string">"장 산"</span></span><span>, </span><span><span class="hljs-string">"Li Si"</span></span><span>, </span><span><span class="hljs-string">"왕 우"</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">// 중국어를 Pinyin으로 전환하십시오</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">// 사용 natsort 종류拼音</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">// 输出종류后的中文</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>

여기서 먼저 OverTrue \ Pinyin을 사용하여 중국어를 Pinyin으로 전환 한 다음 Natsort () 를 통해 Pinyin을 분류 한 다음 Pinyin에 따라 원래 중국어의 순서를 복원합니다.

3. 요약

Natsort () 는 자연 순서로 배열을 정렬 할 수있는 매우 강력한 기능이지만, 중국어를 다룰 때 성능이 종종 우리의 요구를 충족시키지 못합니다. 이 문제를 해결하려면 다음을 선택할 수 있습니다.

  1. Collator 클래스를 사용하면 중국 Pinyin에 따라 정렬 할 수 있습니다.

  2. 정렬 로직을 완전히 제어하여 맞춤형 정렬 기능을 작성하십시오.

  3. Natsort () 과 Pinyin Conversion Library를 결합하여 중국어를 먼저 Pinyin으로 변환하여 정렬하십시오.

다른 솔루션은 다양한 요구에 적응하여 개발자는 실제 조건에 따라 한자를 정렬하기 위해 가장 적합한 솔루션을 선택할 수 있습니다.