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

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

作成日: 更新日:

基本的な使い方

str_ends_with関数は、文字列が指定された接尾辞で終わっているかどうかを判定する関数です。この関数は、PHP 8.0.0で導入され、文字列の末尾が特定の部分文字列と一致するかどうかを簡単に確認できます。具体的には、str_ends_with(string $haystack, string $needle): boolという形式で使用します。$haystackは検索対象となる文字列であり、$needleは検索する接尾辞です。

関数は、$haystack$needleで終わる場合にtrueを返し、そうでない場合はfalseを返します。大文字小文字は区別されます。例えば、str_ends_with("Hello World", "World")trueを返しますが、str_ends_with("Hello World", "world")falseを返します。

この関数は、ファイル名やURLの拡張子をチェックする際、または特定の文字列で終わるデータを処理する際に役立ちます。以前は、substr関数やstrcmp関数などを組み合わせて同様の処理を行う必要がありましたが、str_ends_with関数を使用することで、より簡潔で可読性の高いコードを書くことができます。

例えば、ファイル名が.txtで終わるかどうかを判定する場合、str_ends_with($filename, ".txt")のように使用できます。これにより、初心者でも簡単に文字列の末尾をチェックする処理を実装できます。

構文(syntax)

1<?php
2$text = "PHPプログラミング";
3$suffix = "グラミング";
4
5// str_ends_with() は、最初の文字列が2番目の文字列で終わる場合に true を返します。
6if (str_ends_with($text, $suffix)) {
7    echo "'{$text}' は '{$suffix}' で終わります。\n"; // この行が出力される
8} else {
9    echo "'{$text}' は '{$suffix}' で終わりません。\n";
10}
11?>

引数(parameters)

string $haystack, string $needle

  • string $haystack: haystack(検索対象の文字列)を指定します。
  • string $needle: needle(検索する文字列)を指定します。

戻り値(return)

bool

指定された文字列が、指定されたサフィックス(末尾の文字列)で終わるかどうかを真偽値(trueまたはfalse)で返します。

サンプルコード

PHP 8 str_ends_with で文字列の終端を判定する

1<?php
2
3/**
4 * 文字列が特定の文字列で終わるかどうかを判定するサンプルコード
5 */
6function strEndsWithExample(): void
7{
8    $haystack = "Hello World";
9    $needle1 = "World";
10    $needle2 = "hello";
11
12    // $haystack が $needle1 で終わるか確認
13    if (str_ends_with($haystack, $needle1)) {
14        echo "'$haystack' は '$needle1' で終わります。\n";
15    } else {
16        echo "'$haystack' は '$needle1' で終わりません。\n";
17    }
18
19    // $haystack が $needle2 で終わるか確認
20    if (str_ends_with($haystack, $needle2)) {
21        echo "'$haystack' は '$needle2' で終わります。\n";
22    } else {
23        echo "'$haystack' は '$needle2' で終わりません。\n";
24    }
25
26    $haystackArray = ["apple.txt", "banana.pdf", "orange.txt"];
27
28    foreach ($haystackArray as $filename) {
29        if (str_ends_with($filename, ".txt")) {
30            echo "'$filename' は '.txt' で終わります。\n";
31        } else {
32            echo "'$filename' は '.txt' で終わりません。\n";
33        }
34    }
35}
36
37strEndsWithExample();

PHP 8のstr_ends_with関数は、文字列が指定した文字列で終わるかどうかを判定する関数です。システムエンジニアを目指す方が文字列処理を理解する上で役立ちます。

この関数は、第一引数 $haystack に検索対象の文字列、第二引数 $needle に末尾に存在するかどうかを確認したい文字列を指定します。str_ends_with($haystack, $needle)のように記述し、$haystack$needle で終わる場合は true を、そうでない場合は false を返します。戻り値はboolean型(真偽値)です。大文字小文字は区別されます。

サンプルコードでは、まず文字列 "Hello World" が "World" で終わるかどうかを判定しています。str_ends_with("Hello World", "World")true を返すため、「'Hello World' は 'World' で終わります。」と表示されます。次に、"Hello World" が "hello" で終わるかどうかを判定しています。こちらは大文字小文字が異なるため false を返し、「'Hello World' は 'hello' で終わりません。」と表示されます。

また、文字列の配列をループ処理し、各要素(ファイル名)が ".txt" で終わるかどうかを判定する例も示しています。str_ends_with関数を用いることで、ファイルの種類を判定したり、特定の拡張子を持つファイルを選別する処理などを簡単に実装できます。

str_ends_with関数は、PHP 8以降で使用可能です。PHP 7以前のバージョンでは動作しないため注意が必要です。引数の順番は $haystack(検索対象の文字列)が先、$needle(検索する文字列)が後です。引数の型が違う場合、PHPが自動で型変換を試みますが、意図しない結果になる可能性があるため、両方とも文字列型にすることを推奨します。大文字小文字は区別されるため、"World""world"`は異なる文字列として扱われます。配列の要素に対して繰り返し処理を行う際にも活用できます。この関数は文字列の末尾が特定の部分文字列と一致するかどうかを判定するのみで、文字列自体を変更することはありません。

PHPで大文字小文字を区別せずに文字列の末尾を確認する

1<?php
2
3/**
4 * 文字列が、大文字小文字を区別せずに特定の文字列で終わるかどうかを確認する
5 *
6 * @param string $haystack 検索対象の文字列
7 * @param string $needle   末尾にあるか確認する文字列
8 *
9 * @return bool 大文字小文字を区別せずに $haystack が $needle で終わる場合は true、そうでない場合は false
10 */
11function str_ends_with_case_insensitive(string $haystack, string $needle): bool
12{
13    $haystack_len = strlen($haystack);
14    $needle_len = strlen($needle);
15
16    // needle が haystack より長い場合は、false を返す
17    if ($needle_len > $haystack_len) {
18        return false;
19    }
20
21    // 大文字小文字を区別せずに比較
22    return strcasecmp(substr($haystack, $haystack_len - $needle_len), $needle) === 0;
23}
24
25// 使用例
26$string = "Hello World";
27
28// 大文字小文字を区別しない比較
29if (str_ends_with_case_insensitive($string, "world")) {
30    echo "'$string' は 'world' (大文字小文字を区別しない) で終わります。\n";
31} else {
32    echo "'$string' は 'world' (大文字小文字を区別しない) で終わりません。\n";
33}
34
35if (str_ends_with_case_insensitive($string, "World")) {
36    echo "'$string' は 'World' (大文字小文字を区別しない) で終わります。\n";
37} else {
38    echo "'$string' は 'World' (大文字小文字を区別しない) で終わりません。\n";
39}

PHPのstr_ends_with関数は、PHP 8から導入された文字列関数で、ある文字列が特定の文字列で終わるかどうかを判定します。引数$haystackには検索対象の文字列、$needleには末尾にあるか確認したい文字列を指定します。戻り値はbool型で、$haystack$needleで終わる場合はtrue、そうでない場合はfalseを返します。

サンプルコードでは、大文字小文字を区別せずに文字列の末尾が特定の文字列と一致するかを判定するstr_ends_with_case_insensitive関数を定義しています。この関数は、$haystack$needleの長さを比較し、$needle$haystackよりも長い場合はfalseを返します。次に、substr関数で$haystackの末尾から$needleの長さ分の文字列を抽出し、strcasecmp関数を使って$needleと大文字小文字を区別せずに比較します。strcasecmp関数は、二つの文字列が等しい場合に0を返すため、結果が0である場合にtrueを返します。

例として、"Hello World"という文字列が"world"または"World"で終わるかどうかを判定しています。str_ends_with_case_insensitive関数を使用することで、大文字小文字の違いを気にせずに末尾が一致するかどうかを確認できます。この関数は、ユーザーからの入力値を検証する際など、大文字小文字を区別する必要がない場合に便利です。

str_ends_with関数は大文字小文字を区別するため、区別せずに比較したい場合は、サンプルコードのように自作関数が必要です。strcasecmp関数は、大文字小文字を区別せずに文字列を比較する関数です。また、substr関数で末尾部分を切り出す際、$haystackの長さから$needleの長さを引いた位置から切り出す必要がある点に注意してください。$needle$haystackより長い場合は、必ずfalseを返すように実装することで、予期せぬエラーを防ぐことができます。自作関数を使用する際は、引数の型を明示的に指定することで、より安全なコードになります。

関連コンテンツ

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