関数の概要
PHPのsubstr_compare関数は、文字列の一部分を他の文字列と比較するための関数です。文字列の特定の位置から指定した長さの部分文字列同士を比較できるため、文字列の一部分の一致や大小関係を調べたい場合に便利です。
パラメータの説明
main_str:比較対象の元になる文字列。str:比較する部分文字列。offset:main_str内で比較を開始する位置。負の値を指定すると文字列末尾からの位置となります。length(省略可能):比較する長さ。指定しなければ、strの長さまで比較します。case_insensitivity(省略可能):大文字小文字を区別するかどうか。1を指定すると区別せずに比較します(デフォルトは0で区別する)。
戻り値
比較結果は整数値で返されます。
- 0:文字列が等しい場合
- 負の値:
main_strの該当部分がstrより小さい場合 - 正の値:
main_strの該当部分がstrより大きい場合
この戻り値は strcmp と同様の意味を持ち、大小関係の判定にも使えます。
使用例
基本的な使い方
<?php
$main = "Hello World";
$compare = "World";
$result = substr_compare($main, $compare, 6);
var_dump($result);
?>
この例では、”Hello World” の6文字目(0始まりで数えると7文字目の「W」)から “World” と比較しています。内容が一致するため 0 が返ります。
大文字小文字を無視して比較する
<?php
$main = "Hello World";
$compare = "world";
$result = substr_compare($main, $compare, 6, strlen($compare), true);
var_dump($result);
?>
最後のパラメータに true を指定することで大文字・小文字を区別せず比較します。この場合も “World” と “world” が一致したと判断され 0 が返されます。
部分文字列の長さを指定して比較する
<?php
$main = "abcdefg";
$compare = "cde";
$result = substr_compare($main, $compare, 2, 2);
var_dump($result); // cdeのうち2文字だけ比較
?>
この例では「abcdefg」の3文字目(index 2)から長さ2の部分文字列「cd」と、「cde」の先頭2文字「cd」を比較します。結果は0となり、一致していることがわかります。
関連する関数
- strcmp – 文字列全体を比較
- strncmp – 文字列の先頭から指定長さだけ比較
- substr – 文字列の一部分を取得
- stripos – 大文字小文字を区別せずに文字列を検索
まとめ
substr_compare関数は、文字列全体ではなく一部分だけを比較したい時に非常に便利な関数です。offsetとlengthを指定できるので、より細かく部分文字列を対象に比較が可能です。実務でも文字列の一部チェックやフィルタリング処理に役立ちます。大文字小文字の区別もオプションで切り替えられるため、柔軟に使い分けられます。
