PHPで文字列が別の文字列で始まるかってどうやって調べるの?

こんにちは、さるまりんです。

今日はプログラミングのお話です。

プログラミング言語って隅々まで覚えているエンジニアの方もいらっしゃるかもしれません。
僕はそこまでは覚えてなくていろんなことを書き始める前によく調べ物をします。
でも毎回調べるのが面倒だなぁと思っていました。
必要に応じて書く。それはそれでいいのですが、毎度毎度のことなのでここに書いてあれば、すぐ使えるかな、いつかは便利機能一覧にでも成長して欲しいと思っています。

startsWith in PHP

文字列が特定の文字列で始まるか調べるのってどうやるんでしょう。

これですがJavaではstartsWithJavaScriptでもstartsWithC#ではStartsWithで簡単に調べることができます。

PHPではそのものの関数はないようです。正規表現を使ったら簡単にできるのかなって思いますが、ちょい苦手なんです。勉強しなければいけませんね。それはまたの機会にして今回はstartsWithです。

こんな風に実装しました。

/**
 * 文字列$haystackは$needleで始まる?
 */
public static function starts_with($haystack, $needle) {
    return $needle === ""
        || substr($haystack, 0, strlen($needle)) === $needle;
}

strlen()は文字列の長さを調べます。そしてsubstr()は文字列からその始まりと長さを指定して一部分を取り出す関数です。
上の実装では$haystackの0番目、最初の文字から$needleの長さ分の文字列を取り出して、それを$needleと比較しています。

言葉で書くとなんかわかりにくいですね。僕の説明がうまくないのですが。

こんな感じで調べてます。


haystack : "I like Chopin."
needle : "I like"


strlen("I like") -> 6
substr("I like Chopin", 0, 6) -> "I like"
"I like" === "I like" -> TRUE

一致しました!

一致しない場合はこんな感じです。


needle : "You love"


strlen("You love") -> 8
substr("I like Chopin", 0, 8) -> "I like C"
"I like C" === "You love" -> FALSE

一致しませんでした!

こんな風にしてstartsWithを実装しました。

今回はこんな風に実装しましたが、実装方法は一つじゃないです。
もっと効率よく動作する実装もあるかもしれないですね。
速いやつ、メモリを使わないやつ。
書き方もそうです。上で触れた正規表現を使うともっとシンプルに書けるかもしれないです。
色々試して良いものを探していきたいと思います。また良いものを見つけたら書かせてくださいね。

まずはこの実装を忘れないようにします。

あ、そうです。startsWithを書いたのだからendsWithもですよね。
また書かせてくださいね。

読んでくださってありがとうございます。

ではまた!