【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
バイトまで比較しています。$length
が9
であるため、「Hello PHP」と「hello php」の部分が大文字・小文字を無視して比較されます。この比較では両者が同じであると判断されるため、戻り値は0
となり、「両方の文字列は、最初の9バイトが大文字・小文字を区別せず等しいです。」というメッセージが出力されます。このようにstrncasecmp
関数は、文字列の特定の範囲だけを、大文字・小文字の違いを気にせず比較したい場合に非常に便利です。
strncasecmp関数は、指定されたバイト数まで、大文字・小文字を区別せずに文字列を比較します。特に、引数$length
は「バイト数」を指定するため、日本語などのマルチバイト文字を含む文字列では、想定と異なる範囲で比較される可能性があります。文字数で比較したい場合は、mb_strncasecmp
関数の利用をご検討ください。また、この関数は戻り値が0
の場合にのみ文字列が等しいことを示し、0
以外の値は辞書順での大小関係を表します。大文字・小文字を厳密に区別して比較したい場合は、代わりにstrncmp
関数を使用してください。