プログラミング中、特に混合数と文字を含む文字列を扱う場合、ソートはそれほど直感的ではない場合があります。従来の文字列ソートメソッドは、数字を文字の順序で比較します。つまり、「2」は「10」の前にランク付けされますが、これは通常予想される結果ではありません。人間が自然に並べ替える方法にもっと沿って、PHPはstrnatcasecmp関数を提供します。これは、数字のサイズと文字の順序に応じて並べ替えることができるため、数字と文字が混合されたときにソートの問題を解決します。
strnatcasecmpは、2つの文字列を比較し、ケースを無視し、自然な順序で並べ替えるPHPの組み込み関数です。 STRCMPやStrCaseCMPなどの通常の文字列比較関数とは異なり、 StrnatCaseCMPは文字列の数値部分を考慮し、文字のASCII値ではなく、数字の実際のサイズでソートします。
strnatcasecmp ( string $str1 , string $str2 ) : int
$ str1 :最初の文字列
$ str2 :2番目の文字列
$ STR1が$ STR2に等しい場合、 0を返します。
$ STR1が$ STR2未満の場合、負の値が返されます。
$ STR1が$ STR2を超える場合、正の値が返されます。
通常、自然な並べ替えが非常に重要な次のシナリオに遭遇します。
ファイル名ソート:たとえば、ファイル名はfile1.txt 、 file2.txt 、 file10.txtです。従来の文字列ソートを使用すると、 file10.txtはfile2.txtの前にランク付けされます。 strnatcasecmpを使用した後、 file10.txtはfile2.txtの後に正しくランク付けされます。
製品番号ソート: Prod100 、 Prod11 、 Prod2などの製品番号。文字列ソートが実行されると、 ProD100はProD11の前にランク付けされます。しかし、 strnatcasecmpを使用してソートすると、当然予想される順序で配置されます。
$files = ["file1.txt", "file12.txt", "file2.txt", "file10.txt"];
usort($files, 'strnatcasecmp');
print_r($files);
出力結果:
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
[3] => file12.txt
)
上記のように、 strnatcasecmpは、文字順ではなく、ファイル名を数値サイズで並べ替えます。
$strings = ["abc10", "abc2", "abc1", "abc22"];
usort($strings, 'strnatcasecmp');
print_r($strings);
出力結果:
Array
(
[0] => abc1
[1] => abc2
[2] => abc10
[3] => abc22
)
この例では、文字列の数値部分は、文字だけでなく、正しく識別され、ソートされます。
strnatcasecmpを使用して自然に並べ替えることができるURLを含む配列があるとします。例えば:
$urls = [
"https://gitbox.net/file10.txt",
"https://gitbox.net/file2.txt",
"https://gitbox.net/file1.txt",
"https://gitbox.net/file12.txt"
];
usort($urls, 'strnatcasecmp');
print_r($urls);
出力結果:
Array
(
[0] => https://gitbox.net/file1.txt
[1] => https://gitbox.net/file2.txt
[2] => https://gitbox.net/file10.txt
[3] => https://gitbox.net/file12.txt
)
この例では、URLのファイル名パーツ( File1.txt 、 file2.txtなど)は自然な順序で配置されます。
strnatcasecmpは、PHPで非常に有用な機能であり、特に混合数と文字を含む文字列を処理するのに適しています。この関数を通じて、従来の文字列ソートメソッドで予期しない動作を避けて、より自然に並べ替えることができます。ファイル名の並べ替え、製品番号の並べ替え、またはURLソートであろうと、 Strnatcasecmpは混合数と文字の問題を簡単に解決し、ソート結果が直感的であることを確認できます。
StrnatCaseCMPを合理的に使用することにより、コードの読みやすさとユーザーエクスペリエンスを改善できるようになり、コンテンツの混合を処理する際の従来のソートロジックに合わせてプログラムをより並べることができます。