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

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

作成日: 更新日:

基本的な使い方

str_contains関数は、ある文字列の中に特定の文字列が含まれているかどうかを判定する関数です。この関数は2つの引数を受け取ります。最初の引数には、検索の対象となる元の文字列を指定します。2番目の引数には、その元の文字列の中に存在するかどうかを確認したい部分文字列を指定します。

指定された部分文字列が元の文字列内に見つかった場合、この関数は論理値のtrue(真)を返します。もし部分文字列が見つからなかった場合は、論理値のfalse(偽)を返します。

str_contains関数はPHP 8で新たに導入されました。これ以前のPHPのバージョンでは、同様の文字列の存在チェックを行うためにstrpos()関数などを使用し、その戻り値がfalseであることと、文字列の先頭で一致した場合に返される0とを区別する必要がありました。しかし、str_contains関数を使用することで、より直感的で簡潔なコードで文字列の存在をチェックできるようになり、コードの可読性が大幅に向上しました。この関数は大文字と小文字を区別して判定を行いますので、利用の際にはご注意ください。

構文(syntax)

1<?php
2$haystack = "Hello, world!";
3$needle = "world";
4
5// $haystackの中に$needleが含まれているかを判定します
6if (str_contains($haystack, $needle)) {
7    echo "'{$needle}' は '{$haystack}' の中に見つかりました。\n";
8} else {
9    echo "'{$needle}' は '{$haystack}' の中に見つかりませんでした。\n";
10}
11?>

引数(parameters)

string $haystack, string $needle

  • string $haystack: 検索対象の文字列
  • string $needle: 検索する文字列

戻り値(return)

bool

文字列 $haystack の中に、文字列 $needle が含まれているかどうかを真偽値で返します。含まれていれば true、含まれていなければ false を返します。

サンプルコード

PHP 8: str_contains で大文字小文字を区別しない検索を行う

1<?php
2
3/**
4 * str_contains() を使って、大文字と小文字を区別しない文字列検索を行います。
5 *
6 * PHP 8 の str_contains() はデフォルトで大文字と小文字を区別します。
7 * 大文字と小文字を区別しない(case-insensitive)検索を行うには、
8 * 比較前に strtolower() 関数などで両方の文字列を小文字(または大文字)に統一します。
9 *
10 * @param string $haystack 検索対象の文字列。
11 * @param string $needle   検索する文字列。
12 * @return bool $haystack に $needle が含まれている場合は true、そうでない場合は false を返す。
13 */
14function containsIgnoreCase(string $haystack, string $needle): bool
15{
16    // 検索対象の文字列と検索する文字列を両方とも小文字に変換してから比較する
17    return str_contains(strtolower($haystack), strtolower($needle));
18}
19
20// --- 実行例 ---
21
22// 検索対象の文字列 (大文字と小文字が混在)
23$mainString = 'The quick brown FOX jumps over the lazy DOG.';
24
25// 検索したい文字列 (小文字)
26$searchString = 'fox';
27
28// 大文字と小文字を区別しない検索を実行し、結果を表示
29if (containsIgnoreCase($mainString, $searchString)) {
30    // $mainString には "FOX" (大文字) が含まれているが、
31    // 'fox' (小文字) で検索しても true が返される
32    echo "「{$searchString}」は文字列内に見つかりました。" . PHP_EOL;
33} else {
34    echo "「{$searchString}」は文字列内に見つかりませんでした。" . PHP_EOL;
35}
36
37// 見つからない場合の例
38$searchStringNotFound = 'cat';
39if (containsIgnoreCase($mainString, $searchStringNotFound)) {
40    echo "「{$searchStringNotFound}」は文字列内に見つかりました。" . PHP_EOL;
41} else {
42    echo "「{$searchStringNotFound}」は文字列内に見つかりませんでした。" . PHP_EOL;
43}
44
45?>

PHP 8で追加されたstr_contains関数は、ある文字列の中に特定の文字列が含まれているかをシンプルに確認できる関数です。この関数は、検索対象の文字列($haystack)と検索したい文字列($needle)の二つの引数を受け取り、$needle$haystack内に存在すればtrueを、存在しなければfalseを戻り値として返します。

str_contains関数はデフォルトで大文字と小文字を区別します。例えば、「PHP」という文字列の中に「php」が含まれるかを検索した場合、両者は異なるものとして扱われ、falseが返されます。

もし、大文字と小文字を区別せずに文字列を検索したい場合は、str_contains関数を使う前に、検索対象と検索したい文字列の両方をstrtolower()関数などを使って全て小文字に変換する前処理が必要です。

提示されたサンプルコードでは、この「大文字と小文字を区別しない検索」を行うためのcontainsIgnoreCase関数が定義されています。この関数は、引数で渡された二つの文字列を内部で一度小文字に変換してからstr_containsを実行することで、大文字と小文字を無視した文字列検索を実現しています。実行例では、'FOX'を含む文字列に対し、小文字の'fox'で検索しても正しく「見つかりました」と表示されることを確認できます。

str_contains関数は、PHP 8で導入され、デフォルトでは大文字と小文字を厳密に区別して検索します。そのため、サンプルコードのように大文字と小文字を区別しない(case-insensitive)検索を行いたい場合は、str_containsを実行する前に、strtolower()関数などを用いて検索対象と検索文字列の両方を同じケース(小文字または大文字)に統一する必要がある点に注意してください。この処理を忘れると、期待通りの検索結果が得られない間違いが発生しやすいです。また、日本語のようなマルチバイト文字を含む文字列を扱う際には、strtolower()ではなくmb_strtolower()関数を使用することで、文字化けや意図しない変換を防ぎ、より安全に利用できます。

PHP 8 str_containsで文字列を含むか判定する

1<?php
2
3/**
4 * 文字列 $haystack が文字列 $needle を含むかどうかを判定するサンプルコード
5 */
6function str_contains_example(): void
7{
8    $haystack = 'This is a sample string.';
9    $needle = 'sample';
10
11    if (str_contains($haystack, $needle)) {
12        echo "'$haystack' contains '$needle'" . PHP_EOL;
13    } else {
14        echo "'$haystack' does not contain '$needle'" . PHP_EOL;
15    }
16
17    $needle = 'Sample'; // 大文字小文字は区別される
18
19    if (str_contains($haystack, $needle)) {
20        echo "'$haystack' contains '$needle'" . PHP_EOL;
21    } else {
22        echo "'$haystack' does not contain '$needle'" . PHP_EOL;
23    }
24}
25
26str_contains_example();

str_contains 関数は、PHP 8 で導入された文字列関数で、ある文字列($haystack)が別の文字列($needle)を含んでいるかどうかを判定します。この関数は、システムエンジニアを目指す方が、文字列処理を行う上で非常に役立つツールとなります。

関数は2つの引数を取ります。第一引数 $haystack は検索対象となる文字列、第二引数 $needle は検索する文字列です。str_contains 関数は、$haystack の中に $needle が存在すれば true を、存在しなければ false を返します。戻り値は bool 型です。

上記のサンプルコードでは、まず $haystack に "This is a sample string." という文字列を、$needle に "sample" という文字列を代入し、str_contains 関数で $haystack$needle を含むかどうかを判定しています。この例では、$haystack$needle を含んでいるため、true が返り、対応するメッセージが出力されます。

次に、$needle を "Sample" に変更し、再度 str_contains 関数を実行しています。PHP の文字列比較は大文字と小文字を区別するため、今度は $haystack$needle を含んでいないと判定され、false が返ります。そのため、異なるメッセージが出力されます。

この関数を利用することで、文字列中に特定のキーワードが含まれているか簡単にチェックできるようになり、例えば、ユーザーからの入力文字列の検証や、ログファイルの解析など、様々な場面で活用できます。

str_contains関数は、第一引数の文字列に第二引数の文字列が含まれているかを判定し、結果をtruefalseで返します。注意点として、この関数はアルファベットの大文字と小文字を厳密に区別するため、'sample'と'Sample'は異なるものとして扱われます。もし区別せずに検索したい場合は、別の方法が必要です。最も重要な点は、この関数はPHP 8.0で新しく追加された機能であるため、PHP 7以前のバージョンでは使用できず、エラーが発生することです。使用する環境のPHPバージョンを必ず確認してください。また、探す文字列に空文字列('')を指定すると、常にtrueが返る仕様も覚えておくと良いでしょう。

関連コンテンツ

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