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

stripos関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

stripos関数は、文字列の中から、指定された部分文字列が最初に現れる位置を、大文字と小文字を区別せずに見つけ出す関数です。この関数は、特定の文字やフレーズがテキスト内のどこにあるかを知りたい場合に特に役立ちます。

この関数を使用する際は、まず検索対象となる元の文字列(haystack)を指定します。次に、その文字列内で探したい部分文字列(needle)を引数として渡します。さらに、オプションとして検索を開始する位置(offset)を指定することも可能です。このoffsetを指定することで、文字列の途中から検索を開始し、特定の範囲内でのみ部分文字列を探すことができます。

検索が成功した場合、stripos関数は部分文字列が最初に現れる位置を整数値で返します。この位置は文字列の先頭を0として数えられ、例えば文字列の先頭で見つかった場合は0が返されます。もし部分文字列が見つからなかった場合は、ブール値のfalseを返します。したがって、この関数の戻り値を利用して条件分岐を行う際には、0falseを明確に区別するために、厳密な比較演算子(===)を使用することが重要です。

PHPには類似の機能を持つstrpos関数も存在しますが、strposが大文字と小文字を厳密に区別して検索するのに対し、striposは大文字と小文字を区別しないという点が最大の相違点です。この特性により、ユーザーが入力したキーワードが大文字・小文字のどちらで記述されていても柔軟にマッチさせたいような、ウェブサイトのコンテンツ検索や入力検証などの場面で非常に重宝されます。

構文(syntax)

1<?php
2$text = "Hello, PHP World!";
3$search_string = "php"; // 大文字小文字を区別しない検索
4
5$position = stripos($text, $search_string);
6
7// 検索文字列が見つかった場合はその位置 (0から始まるインデックス)、見つからない場合は false を返します。
8if ($position !== false) {
9    echo "検索文字列が見つかった位置: " . $position;
10} else {
11    echo "検索文字列は見つかりませんでした。";
12}
13?>

引数(parameters)

string $haystack, string $needle, int $offset = 0

  • string $haystack: 検索対象の文字列
  • string $needle: 検索する文字列
  • int $offset = 0: 検索を開始する位置(デフォルトは0)

戻り値(return)

int|false

文字列内で、大文字・小文字を区別せずに検索した最初の出現位置のインデックスを返します。見つからなかった場合は false を返します。

サンプルコード

PHP stripos: 大文字小文字を区別しない文字列検索

1<?php
2
3/**
4 * stripos関数は、大文字・小文字を区別せずに文字列を検索します。
5 * このサンプルは、その「大文字・小文字を区別しない (case-insensitive)」特性を示します。
6 */
7function demonstrateStripos(): void
8{
9    $haystack = "Hello PHP World! Let's learn php programming.";
10
11    echo "検索対象文字列: \"{$haystack}\"\n\n";
12
13    // 様々な検索文字列の例
14    $needles = [
15        "php",         // 小文字
16        "PHP",         // 大文字
17        "World",       // 先頭が大文字
18        "world",       // 全て小文字
19        "Programming", // 先頭が大文字
20        "programming", // 全て小文字
21        "Java"         // 存在しない文字列
22    ];
23
24    foreach ($needles as $needle) {
25        // stripos() は大文字・小文字を区別せずに検索します (case-insensitive)。
26        // 例えば "php" と "PHP" は同じ位置で見つかります。
27        $position = stripos($haystack, $needle);
28
29        echo "検索文字列: \"{$needle}\" -> ";
30
31        // 検索結果が 0 (文字列の先頭で見つかった場合) も含め、
32        // 見つからなかった場合は false を返すため、厳密な比較 (=== または !==) が重要です。
33        if ($position !== false) {
34            echo "見つかりました。開始位置: {$position}\n";
35        } else {
36            echo "見つかりませんでした。\n";
37        }
38    }
39
40    echo "\n--- 補足 ---\n";
41    echo "stripos() は、「case-insensitive (大文字・小文字を区別しない)」検索を行います。\n";
42    echo "もし「case-sensitive (大文字・小文字を区別する)」検索を行いたい場合は、\n";
43    echo "strpos() 関数を使用してください。\n";
44}
45
46// 関数の実行
47demonstrateStripos();

PHPのstripos関数は、指定された文字列の中から別の文字列が大文字・小文字を区別せずに(case-insensitive)存在するかどうかを検索し、最初に見つかった位置を返す関数です。

この関数は、$haystackという検索対象の文字列の中から、$needleという検索したい文字列を探します。文字列が見つかった場合、その文字列が始まる位置を数値(オフセット)として返します。この位置は0から始まります。もし文字列が見つからなかった場合は、falseが返されます。検索開始位置を任意に指定できる$offset引数もありますが、省略可能です。

サンプルコードでは、"Hello PHP World! Let's learn php programming."という文字列を検索対象に、"php""PHP""World""world"といった様々な大文字・小文字の組み合わせで検索を行っています。striposは「php」と「PHP」を区別せず、同じ開始位置を返すことで、そのcase-insensitiveな特性を示しています。戻り値が0の場合も有効な位置を示すため、見つからなかったことを判定するには$position !== falseのような厳密な比較が重要になります。

大文字・小文字を区別する(case-sensitive)検索を行いたい場合は、strpos関数を使用してください。

stripos関数は、文字列の中から指定した部分文字列を「大文字・小文字を区別せずに」検索する点が最も重要です。例えば「php」と「PHP」は同じものとして扱われます。検索結果が見つからない場合はfalseを返しますが、文字列の先頭(0番目の位置)で見つかった場合もint 0を返します。この0falseは、通常の比較演算子(==)を使うとtrueと判断されてしまうため、結果の判定には厳密な比較演算子(===または!==)を必ず使用してください。これにより、意図しない誤動作を防ぎ、安全にコードを利用できます。もし大文字・小文字を区別して検索したい場合は、代わりにstrpos関数を使用してください。

PHP striposで部分文字列を検索する

1<?php
2
3/**
4 * demonstrateStripos()
5 *
6 * stripos() 関数を使用して、文字列内で部分文字列を大文字小文字を区別せずに検索し、
7 * その位置を返す方法、または見つからない場合に false を返す方法を示します。
8 *
9 * @return void
10 */
11function demonstrateStripos(): void
12{
13    $haystack = "Hello, World! This is a PHP 8 example.";
14    $needleFound = "world"; // 大文字小文字を区別しない検索
15    $needleFoundWithOffset = "php"; // オフセットを指定して検索
16    $needleNotFound = "java"; // 見つからない部分文字列
17
18    echo "検索対象の文字列: '{$haystack}'\n\n";
19
20    // 例1: 部分文字列が見つかる場合 (大文字小文字を区別しない)
21    // "world" は "World" として見つかる
22    $position1 = stripos($haystack, $needleFound);
23
24    // stripos は見つかった位置(0から始まるインデックス)または false を返すため、
25    // 0 の場合と false の場合を厳密に区別するために `!== false` を使用します。
26    if ($position1 !== false) {
27        echo "例1: '{$needleFound}' が位置 {$position1} で見つかりました。\n";
28        echo "その位置からの部分文字列: " . substr($haystack, $position1) . "\n\n";
29    } else {
30        echo "例1: '{$needleFound}' は見つかりませんでした。\n\n";
31    }
32
33    // 例2: 部分文字列が見つからない場合
34    $position2 = stripos($haystack, $needleNotFound);
35
36    if ($position2 !== false) {
37        echo "例2: '{$needleNotFound}' が位置 {$position2} で見つかりました。\n\n";
38    } else {
39        echo "例2: '{$needleNotFound}' は見つかりませんでした。\n\n";
40    }
41
42    // 例3: 検索開始位置 (オフセット) を指定する場合
43    // 文字列 "PHP" を検索対象の先頭から20文字目以降で検索します。
44    // "Hello, World! This is a PHP 8 example."
45    // 0                   1         2
46    // 012345678901234567890123456789012345
47    //                      ^ (offset 20)
48    $offset = 20;
49    $position3 = stripos($haystack, $needleFoundWithOffset, $offset);
50
51    if ($position3 !== false) {
52        echo "例3: '{$needleFoundWithOffset}' がオフセット {$offset} 以降、位置 {$position3} で見つかりました。\n";
53        echo "その位置からの部分文字列: " . substr($haystack, $position3) . "\n\n";
54    } else {
55        echo "例3: '{$needleFoundWithOffset}' はオフセット {$offset} 以降では見つかりませんでした。\n\n";
56    }
57
58    // 例4: オフセットが大きすぎて部分文字列が見つからない場合
59    $offsetTooLarge = 30; // "PHP" が現れる位置より後のオフセット
60    $position4 = stripos($haystack, $needleFoundWithOffset, $offsetTooLarge);
61
62    if ($position4 !== false) {
63        echo "例4: '{$needleFoundWithOffset}' がオフセット {$offsetTooLarge} 以降、位置 {$position4} で見つかりました。\n\n";
64    } else {
65        echo "例4: '{$needleFoundWithOffset}' はオフセット {$offsetTooLarge} 以降では見つかりませんでした。\n\n";
66    }
67}
68
69// 関数を実行して stripos の動作を確認します。
70demonstrateStripos();
71
72?>

PHP 8のstripos()関数は、指定した文字列($haystack)の中から、特定の部分文字列($needle)を大文字小文字を区別せずに検索し、最初に見つかった位置を返す関数です。検索は0から始まるインデックスで行われます。三番目の引数である$offsetに数値を指定すると、その位置から検索を開始することができます。

部分文字列が見つかった場合、stripos()関数は$haystack内で$needleが開始される位置(0からのインデックス)を整数で返します。例えば、文字列の先頭で見つかった場合は0が返されます。一方、部分文字列が見つからなかった場合は、falseが返されます。そのため、戻り値が0の場合とfalseの場合を厳密に区別するために、比較演算子!== falseを使用することが推奨されます。

サンプルコードでは、"Hello, World! This is a PHP 8 example."という文字列から"world"を検索し、大文字小文字を無視してその位置を特定する例が示されています。また、検索開始位置を20文字目以降に指定して"php"を検索する例や、検索対象の部分文字列が見つからない場合にfalseが返される様子も確認できます。この関数は、文字列内の特定のキーワードを柔軟に探す際に非常に便利です。

PHPのstripos関数は、文字列内を大文字小文字を区別せずに検索し、最初に見つかった部分文字列の開始位置を整数で返します。部分文字列が見つからなかった場合はfalseを返します。特に注意が必要なのは、部分文字列が検索対象の文字列の先頭で見つかった場合、戻り値が0になる点です。PHPの型変換の特性上、0falseと同等と見なされることがあるため、部分文字列が見つかったかどうかを判定する際は、if ($position !== false)のように厳密な比較演算子!==を必ず使用してください。これにより、先頭で見つかった場合でも正しく処理できます。また、$offset引数で検索開始位置を指定できますが、戻り値は常に元の文字列の先頭からの絶対位置を示しますのでご注意ください。

関連コンテンツ

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