【PHP8.x】strncasecmp関数の使い方

作成日: 更新日:

strncasecmp関数は、2つの文字列を、大文字・小文字を区別せずに、指定された文字数まで比較する関数です。この関数は3つの引数を取ります。最初の2つの引数には比較したい文字列を渡し、3番目の引数には比較する文字の最大数を整数で指定します。

戻り値は整数です。もし2つの文字列が指定された文字数まで完全に一致した場合、0を返します。最初の文字列が2番目の文字列より辞書順で小さい場合(つまり、比較対象の文字で、最初の文字列の文字が大文字小文字を無視した上で2番目の文字列の文字よりも先に来る場合)は負の値を返します。逆に、最初の文字列が2番目の文字列より大きい場合(比較対象の文字で、最初の文字列の文字が大文字小文字を無視した上で2番目の文字列の文字よりも後に来る場合)は正の値を返します。大文字と小文字は比較前に内部的に同じものとして扱われるため、「Apple」と「apple」は比較上区別されません。

この関数は、例えば、ユーザーが入力した文字列とデータベースに保存されている文字列を、大文字・小文字の違いを気にせずに、かつ部分的に比較したい場合に特に有用です。セキュリティ関連のチェックや、特定の接頭辞(プレフィックス)を持つ文字列を効率的に判別する際などにも活用できます。PHPの内部関数として提供されており、効率的な文字列比較を実現します。

基本的な使い方

構文(syntax)

strncasecmp("String A", "string b", 6);

引数(parameters)

string $string1, string $string2, int $length

  • string $string1: 比較対象の1つ目の文字列
  • string $string2: 比較対象の2つ目の文字列
  • int $length: 比較する文字数

戻り値(return)

int

与えられた2つの文字列を、指定された最大文字数まで大文字・小文字を区別せずに比較した結果を整数で返します。比較結果は、0(一致)、負の値(1つ目の文字列が小さい)、正の値(1つ目の文字列が大きい)のいずれかになります。

サンプルコード

PHP strncasecmp で大文字小文字を区別せず比較する

<?php

/**
 * strncasecmp関数の基本的な使い方を示すサンプルコードです。
 * この関数は、大文字・小文字を区別せずに、指定したバイト数まで文字列を比較します。
 *
 * 戻り値:
 *  - 0: 両方の文字列が指定バイト数まで等しい場合
 *  - < 0: string1が指定バイト数までstring2より小さい場合
 *  - > 0: string1が指定バイト数までstring2より大きい場合
 */

// 比較する最初の文字列を定義します。
$string1 = "Hello PHP World";

// 比較する2番目の文字列を定義します。
// 大文字・小文字が異なりますが、先頭部分は同じ意味の文字列です。
$string2 = "hello php project";

// 比較するバイト数を指定します。
// この例では、最初の9バイト ("Hello PHP" と "hello php") を比較します。
$length = 9;

// strncasecmp関数を呼び出し、結果を変数に格納します。
// 大文字・小文字を区別せず、指定されたバイト数まで比較します。
$result = strncasecmp($string1, $string2, $length);

// 比較結果に基づいてメッセージを出力します。
echo "文字列1: '{$string1}'\n";
echo "文字列2: '{$string2}'\n";
echo "比較バイト数: {$length}\n";
echo "-------------------------------\n";

if ($result === 0) {
    echo "結果: 両方の文字列は、最初の{$length}バイトが大文字・小文字を区別せず等しいです。\n";
    echo "(例: 'Hello PHP' と 'hello php' の最初の9文字を比較)\n";
} elseif ($result < 0) {
    echo "結果: 文字列1は、最初の{$length}バイトが文字列2より小さいです。\n";
    echo "(例: 'Apple' と 'Banana' の最初の5文字を比較すると 'Apple' が小さい)\n";
} else { // $result > 0
    echo "結果: 文字列1は、最初の{$length}バイトが文字列2より大きいです。\n";
    echo "(例: 'Banana' と 'Apple' の最初の5文字を比較すると 'Banana' が大きい)\n";
}

?>

PHPのstrncasecmp関数は、二つの文字列を大文字・小文字を区別せず、指定したバイト数まで比較するために使用する関数です。この関数は、例えばユーザーの入力が大文字・小文字を問わずに特定のキーワードと一致するかを確認する際など、柔軟な文字列比較が必要な場面で活用できます。

引数としては、比較対象の最初の文字列を$string1に、二番目の文字列を$string2に指定します。そして、比較を行うバイト数を$lengthに整数で渡します。

関数の戻り値は整数です。二つの文字列が指定したバイト数まで大文字・小文字を区別せず完全に一致する場合、0が返されます。もし$string1$string2よりも小さい(辞書順で前にある)と判断された場合は負の値が、大きい(辞書順で後にある)と判断された場合は正の値が返されます。

提示されたサンプルコードでは、「Hello PHP World」という文字列と「hello php project」という文字列を、最初の9バイトまで比較しています。$length9であるため、「Hello PHP」と「hello php」の部分が大文字・小文字を無視して比較されます。この比較では両者が同じであると判断されるため、戻り値は0となり、「両方の文字列は、最初の9バイトが大文字・小文字を区別せず等しいです。」というメッセージが出力されます。このようにstrncasecmp関数は、文字列の特定の範囲だけを、大文字・小文字の違いを気にせず比較したい場合に非常に便利です。

strncasecmp関数は、指定されたバイト数まで、大文字・小文字を区別せずに文字列を比較します。特に、引数$lengthは「バイト数」を指定するため、日本語などのマルチバイト文字を含む文字列では、想定と異なる範囲で比較される可能性があります。文字数で比較したい場合は、mb_strncasecmp関数の利用をご検討ください。また、この関数は戻り値が0の場合にのみ文字列が等しいことを示し、0以外の値は辞書順での大小関係を表します。大文字・小文字を厳密に区別して比較したい場合は、代わりにstrncmp関数を使用してください。

【PHP8.x】strncasecmp関数の使い方 | いっしー@Webエンジニア