PHPでは、 strnatcasecmpは2つの文字列を比較するための関数です。従来の文字列比較関数とは異なります。 strnatcasecmpは、自然なソートアルゴリズム(自然数ソート)を使用しており、比較時に症例に敏感ではありません。この関数の一般的なアプリケーションの1つは、バージョン番号を並べ替えることです。特にバージョン番号に数字と文字が含まれている場合、 STRNATCASECMPは単にアルファベット順ではなく、人間の直感的な方法でソートできます。
int strnatcasecmp ( string $string1 , string $string2 )
$ string1 :比較する最初の文字列。
$ string2 :比較する2番目の文字列。
$ string1が$ string2未満の場合、負の整数が返されます。
$ string1が$ string2に等しい場合、0を返します。
$ string1が$ string2を超える場合、正の整数が返されます。
バージョン番号のソートでは、通常、バージョン番号の自然な順序で比較できるようにする必要があります。たとえば、 1.10は1.9以降にする必要があります。 strnatcasecmpは、アルファベット順に依存するのではなく、比較時に数値のサイズを考慮するため、理想的なソリューションを提供します。
バージョン番号を含む配列があると仮定します。これは、 Strnatcasecmpを使用して達成できる自然な順序で並べ替えたいとします。
<?php
// 例バージョン番号アレイ
$versions = [
"1.2.10",
"1.10.0",
"1.9.9",
"1.2.2",
"1.1.1",
];
// 使用 uasort() 選別,そして使用します strnatcasecmp 比較関数として
uasort($versions, function($a, $b) {
return strnatcasecmp($a, $b);
});
// 输出選別后的版本号
foreach ($versions as $version) {
echo $version . "\n";
}
?>
1.1.1
1.2.2
1.2.10
1.9.9
1.10.0
この例では、バージョン番号アレイはUASORTを使用してソートされ、各2つのバージョン番号はstrnatcasecmpによって比較されます。並べ替え後の結果は、人間の直感性の自然な順序に沿っています。1.1.1は上部にあり、 1.2.10は下部に、 1.10.0は下部1.9.9です。
strnatcasecmpの利点は、バージョン番号の数値を個別の文字としてではなく、数字のサイズによって比較することです。したがって、 1.10は1.9の背後にあります。これは、バージョン番号ソートに関する直感に沿っています。
STRNATCASECMP関数は、特にバージョン番号を自然な順序でソートする必要があるシナリオでは、PHPで非常に便利なツールです。文字と数字を混ぜた文字列を処理するだけでなく、比較時にケースを自動的に無視するため、多くの場合に使用するのに理想的です。