phpday 2022

str_ends_with

(PHP 8)

str_ends_with文字列が、指定された文字列で終わるかを調べる。

説明

str_ends_with(string $haystack, string $needle): bool

haystackneedle で終わるかを調べます。 大文字小文字は区別されます。

パラメータ

haystack

検索対象の文字列。

needle

haystack で調べる部分文字列

戻り値

haystackneedle で終わる場合、true を返します。 そうでない場合、false を返します。

例1 空文字列 '' を使う場合

<?php
if (str_ends_with('abc''')) {
    echo 
"All strings end with the empty string";
}
?>

上の例の出力は以下となります。

All strings end with the empty string

例2 大文字小文字の区別

<?php
$string 
'The lazy fox jumped over the fence';

if (
str_ends_with($string'fence')) {
    echo 
"The string ends with 'fence'\n";
}

if (
str_ends_with($string'Fence')) {
    echo 
'The string ends with "fence"';
} else {
    echo 
'"fence" was not found because the case does not match';
}

?>

上の例の出力は以下となります。

The string ends with 'fence'
"fence" was not found because the case does not match

注意

注意: この関数はバイナリデータに対応しています。

参考

  • str_contains() - 指定された部分文字列が、文字列に含まれるかを調べる
  • str_starts_with() - 文字列が指定された部分文字列で始まるかを調べる
  • stripos() - 大文字小文字を区別せずに文字列が最初に現れる位置を探す
  • strrpos() - 文字列中に、ある部分文字列が最後に現れる場所を探す
  • strripos() - 文字列中で、特定の(大文字小文字を区別しない)文字列が最後に現れた位置を探す
  • strstr() - 文字列が最初に現れる位置を見つける
  • strpbrk() - 文字列の中から任意の文字を探す
  • substr() - 文字列の一部分を返す
  • preg_match() - 正規表現によるマッチングを行う

add a note add a note

User Contributed Notes 4 notes

up
19
javalc6 at gmail dot com
9 months ago
In case you are using an older version of PHP (e.g. PHP 7), you can define and use the following function:

function endsWith($haystack, $needle) {
    $length = strlen($needle);
    return $length > 0 ? substr($haystack, -$length) === $needle : true;
}
up
1
divinity76 at gmail dot com
2 months ago
this is the fastest php7-implementation i can think of, it should be faster than javalc6 and Reinder's implementations, as this one doesn't create new strings (but theirs does)

<?php
if (! function_exists('str_ends_with')) {
    function
str_ends_with(string $haystack, string $needle): bool
   
{
       
$needle_len = strlen($needle);
        return (
$needle_len === 0 || 0 === substr_compare($haystack, $needle, - $needle_len));
    }
}
?>
up
0
kitchin at lapage dot com
4 days ago
Wordpress 5.9 RC3 does it this way:

<?php
if ( ! function_exists( 'str_ends_with' ) ) {
    function
str_ends_with( $haystack, $needle ) {
        if (
'' === $haystack && '' !== $needle ) {
            return
false;
        }
       
$len = strlen( $needle );
        return
0 === substr_compare( $haystack, $needle, -$len, $len );
    }
}
?>

I suppose the compiler optimizes for the fact that `substr_compare()` is only being used for equality, not comparison ( <0, >0 ).
up
0
Reinder
3 months ago
In PHP7 you may want to use:

if (!function_exists('str_ends_with')) {
  function str_ends_with($str, $end) {
    return (@substr_compare($str, $end, -strlen($end))==0);
  }
}

AFAIK that is binary safe and doesn't need additional checks.
To Top