現在の位置: ホーム> 最新記事一覧> PHP strnatcasecmpを使用して2つの文字列を比較する場合、ケースを無視する方法は?

PHP strnatcasecmpを使用して2つの文字列を比較する場合、ケースを無視する方法は?

gitbox 2025-05-27

PHPでは、文字列の比較は非常に一般的な操作です。通常、 strcmp()またはstrcasecmp()関数を使用して2つの文字列のサイズと等式を比較しますが、両方の関数は文字のascii値に従って文字によってキャラクターと比較されますが、 strnatcasecmp()関数は「自然な種類」で比較されますが、ケースを無視します。

この記事では、PHPのstrnatcasecmp()関数を使用して、2つの文字列のケース比較を無視し、他の比較関数とどのように異なるかを詳細に説明します。

strnatcasecmp関数とは何ですか?

strnatcasecmp()は、PHPの組み込み関数です。これはフルネーム「String Natural Case-Insensitive比較」です。 「自然な順序」に従って2つの文字列を比較し、高度と小文字を無視します。

いわゆる「ナチュラルソート」は、単に文字ごとの比較ではなく、数値パーツが数値として比較されることを意味します。たとえば、文字列「file10.txt」、「file2.txt」より大きいと見なされます。これは、文字「1」が2より大きいためではなく、2より大きいためです。

strnatcasecmp関数の構文

int strnatcasecmp ( string $str1 , string $str2 )
  • $ str1および$ str2 :比較する2つの文字列。

  • 返品値:

    • $ STR1$ STR2未満の場合、負の数が返されます。

    • 2つの文字列が等しい場合は、0を返します。

    • $ STR1$ STR2を超える場合、正の数が返されます。

例:strnatcasecmpを使用して、ケース比較文字列を無視します

<?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()いいえはいケースに鈍感、自然な選別

組み合わせたURLの例

ファイル名に基づいて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

これは、ファイル名、バージョン番号など、数字の文字列を扱うときに非常に実用的です。