[PHP] startsWith, endsWith を実装する

Java で何の気なしに使っていた startsWith, endsWith
PHP で同様のことをしようと思ったのですが、これに相当するメソッドはないんですね。
そういえばpreg_matchとかでチェックしていたような覚えがあります。

#そもそもstartsWith, endsWith とは

指定の文字列で始まる/終わるかを判定するメソッドです。

startsWith

public boolean startsWith(String prefix)
この文字列が、指定された接頭辞で始まるかどうかを判定します。

パラメータ:
prefix – 接頭辞
戻り値:
引数によって表される文字シーケンス、この文字列によって表される文字シーケンスの接頭辞である場合は true、そうでない場合は false。引数が空の文字列の場合や、equals(Object) メソッドによる判定においてこの String オブジェクトに等しい場合にも true が返される
導入されたバージョン:
1. 0

endsWith

public boolean endsWith(String suffix)
この文字列が、指定された接尾辞で終るかどうかを判定します。

パラメータ:
suffix – 接尾辞
戻り値:
引数によって表される文字シーケンスが、このオブジェクトによって表される文字シーケンスの接尾辞である場合は true、そうでない場合は false。引数が空の文字列の場合や、equals(Object) メソッドによる判定においてこの String オブジェクトに等しい場合にも、結果は true になる

引用: String (Java Platform SE 6)

#使い方

boolean result = str.startsWith("abc");
boolean result = str.endsWith("efg");

#実装する

いろいろと試してみましたが以下の方法がシンプルな気がします。

function startsWith($haystack, $needle)
{
    return $needle === "" || strpos($haystack, $needle) === 0;
}
function endsWith($haystack, $needle)
{
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}

var_dump(startsWith("hello world", "hello")); // true
var_dump(endsWith("hello world", "world"));   // true

引用: string – startsWith() and endsWith() functions in PHP – Stack Overflow

同ページ内で一番評価の高い方法は以下です。
やっていることはほぼほぼ同じようですね。こちらの方が何をやってるか分かりやすいかも。

function startsWith($haystack, $needle)
{
     $length = strlen($needle);
     return (substr($haystack, 0, $length) === $needle);
}

function endsWith($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}
twitterfacebookhatenafacebook