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

作成日: 更新日:

substr_compare関数は、2つの文字列の指定された部分を比較する関数です。この関数は、特定の文字列の一部が別の文字列の同じ部分と一致するかどうかを効率的に判断したい場合に役立ちます。

具体的には、比較する最初の文字列($main_str)と2番目の文字列($str)を指定します。さらに、最初の文字列から比較を開始する位置を示すオフセット($offset)と、比較する文字の長さ($length)も設定できます。オプションとして、大文字と小文字を区別せずに比較するかどうか($case_insensitivity)も指定可能です。この引数をtrueに設定すると、大文字と小文字の違いを無視して比較が行われます。

比較はバイト単位で行われ、結果は整数値で返されます。比較した両方の部分文字列が完全に一致する場合は0が返されます。最初の部分文字列が2番目の部分文字列よりも大きい場合は正の整数が、小さい場合は負の整数が返され、辞書順での大小関係も判断できます。ただし、指定されたオフセットが無効な場合や、比較する長さが文字列の範囲を超えるなど、比較が不可能な状況ではfalseを返すことがあります。

この関数は、URLの一部を比較したり、ファイルパスの一致を確認したりする際など、文字列の特定の部分を厳密に比較する必要がある状況で非常に有用です。特に、大文字・小文字を区別するかどうかを柔軟に制御できる点が特徴です。

基本的な使い方

構文(syntax)

<?php
$main_string = "Hello PHP World";
$search_string = "PHP";
$offset = 6;
$length = 3;
$result = substr_compare($main_string, $search_string, $offset, $length, false);
?>

引数(parameters)

string $haystack, string $needle, int $offset, ?int $length = null, bool $case_insensitive = false

  • string $haystack: 検索対象の文字列
  • string $needle: 検索する部分文字列
  • int $offset: $haystack の検索を開始する位置
  • ?int $length = null: $needle の長さを指定する整数。null の場合は $needle の最後まで比較します。
  • bool $case_insensitive = false: true を指定すると、大文字・小文字を区別せずに比較します。

戻り値(return)

int|false

文字列の部分文字列を、大文字小文字を区別して、指定された位置から比較した結果を返します。比較結果が0未満の場合は-1、0より大きい場合は1、一致する場合は0を返します。比較対象の文字列が指定された長さよりも短い場合はfalseを返します。

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