PHPでは、文字列の比較は非常に一般的な操作です。通常、 strcmp()またはstrcasecmp()関数を使用して2つの文字列のサイズと等式を比較しますが、両方の関数は文字のascii値に従って文字によってキャラクターと比較されますが、 strnatcasecmp()関数は「自然な種類」で比較されますが、ケースを無視します。
この記事では、PHPのstrnatcasecmp()関数を使用して、2つの文字列のケース比較を無視し、他の比較関数とどのように異なるかを詳細に説明します。
strnatcasecmp()は、PHPの組み込み関数です。これはフルネーム「String Natural Case-Insensitive比較」です。 「自然な順序」に従って2つの文字列を比較し、高度と小文字を無視します。
いわゆる「ナチュラルソート」は、単に文字ごとの比較ではなく、数値パーツが数値として比較されることを意味します。たとえば、文字列「file10.txt」は、「file2.txt」より大きいと見なされます。これは、文字「1」が2より大きいためではなく、2より大きいためです。
int strnatcasecmp ( string $str1 , string $str2 )
$ str1および$ str2 :比較する2つの文字列。
返品値:
$ STR1が$ STR2未満の場合、負の数が返されます。
2つの文字列が等しい場合は、0を返します。
$ STR1が$ STR2を超える場合、正の数が返されます。
<?php
$str1 = "File10.txt";
$str2 = "file2.txt";
$result = strnatcasecmp($str1, $str2);
if ($result < 0) {
echo "'$str1' 未満 '$str2'";
} elseif ($result > 0) {
echo "'$str1' より大きい '$str2'";
} else {
echo "'$str1' そして '$str2' 等しい";
}
?>
出力:
'File10.txt' より大きい 'file2.txt'
ここでは、最初の文字列の数の部分は「10」で、2番目の文字列は「2」ですが、 strnatcasecmp()は数のサイズを正しく認識し、ケースを無視します。
関数名 | ケースに敏感かどうか | 自然に並べ替えるかどうか | 説明します |
---|---|---|---|
strcmp() | はい | いいえ | ケースに敏感、キャラクターの比較 |
strcasecmp() | いいえ | いいえ | ケース非感受性、文字ごとの比較 |
strnatcmp() | はい | はい | ケースに敏感で、自然な並べ替え |
strnatcasecmp() | いいえ | はい | ケースに鈍感、自然な選別 |
ファイル名に基づいて2つのURLのパス部分を比較し、ケースと数値の関係を無視すると、 Strnatcasecmp()を使用してそれを達成できます。
<?php
$url1 = "https://gitbox.net/files/File10.txt";
$url2 = "https://gitbox.net/files/file2.txt";
// 分析 URL,パス部分を取ります
$path1 = parse_url($url1, PHP_URL_PATH);
$path2 = parse_url($url2, PHP_URL_PATH);
// 使用 strnatcasecmp パスを比較します
if (strnatcasecmp($path1, $path2) < 0) {
echo "$path1 未満 $path2";
} elseif (strnatcasecmp($path1, $path2) > 0) {
echo "$path1 より大きい $path2";
} else {
echo "$path1 そして $path2 等しい";
}
?>
出力:
/files/File10.txt より大きい /files/file2.txt
これは、ファイル名、バージョン番号など、数字の文字列を扱うときに非常に実用的です。