strnatcasecmp

関数の概要

PHPの strnatcasecmp 関数は、2つの文字列を「自然順(ナチュラルオーダー)」で比較します。さらに大文字と小文字を区別せずに比較を行うため、ファイル名やリストなどの文字列を自然な並び順にソートしたい場合に便利です。

パラメータの説明

  • string $str1 比較する最初の文字列を指定します。
  • string $str2 比較する2番目の文字列を指定します。

戻り値

strnatcasecmp は整数値を返します。

  • 0:2つの文字列が同じ(大文字小文字を区別せず自然順で等しい)
  • 0より小さい:$str1$str2 より自然順で前に来る
  • 0より大きい:$str1$str2 より自然順で後に来る

使用例

基本的な使い方

<?php
$a = "file10.txt";
$b = "file2.txt";

$result = strnatcasecmp($a, $b);

if ($result < 0) {
    echo "$a は $b の前にあります。";
} elseif ($result > 0) {
    echo "$a は $b の後にあります。";
} else {
    echo "$a と $b は同じです。";
}
?>

この例では、通常の文字列比較(strcmp)だと “file10.txt” が “file2.txt” より前に来てしまいますが、 strnatcasecmp なら数値部分を考慮し「file2.txt」が先に来る正しい順序を判定します。

配列の自然順ソートに利用

<?php
$files = ["img12.png", "img10.png", "img2.png", "img1.png"];

// 大文字小文字を無視した自然順ソート
usort($files, 'strnatcasecmp');

print_r($files);
?>

strnatcasecmp をコールバックに使うことで、配列の中身を自然な並び順で大文字小文字の違いを無視して整列できます。

大文字小文字を無視した文字列比較の応用

<?php
$keyword = "Sample20";
$userInput = "sample3";

// 大文字小文字を無視して検索キーワードの大小を判定
if (strnatcasecmp($keyword, $userInput) < 0) {
    echo "キーワードの方が前に来ます。";
} else {
    echo "ユーザー入力の方が前か同じ順序です。";
}
?>

たとえば、ユーザーからの入力値と既存のキーワードを比較する時に重宝します。大文字・小文字の違いを無視しつつ、数値の大小も自然に比較可能です。

関連する関数

  • strnatcmp:自然順で大文字小文字を区別して比較
  • strcmp:バイト単位で大文字小文字を区別して比較
  • strcasecmp:バイト単位で大文字小文字を無視して比較
  • usort:配列をユーザー定義関数でソートするのに用いる

まとめ

strnatcasecmp は、大文字小文字の違いを無視しつつも数値を含む文字列を自然な順序で比較したいときに非常に便利な関数です。特にファイル名やリスト、ユーザー入力の照合など実務的にも活用範囲が広く、配列のソートにもよく利用されます。PHPで文字列の自然順かつ大文字小文字無視の比較をしたい場合は、ぜひ使ってみてください。