0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】URLパス部分に特定の文字列が含まれるかどうかの条件分岐【str_contains()】

Last updated at Posted at 2022-09-06

パスを取得

$path = $_SERVER['REQUEST_URI']

PHPが提供するスーパーグローバル変数$_SERVERを利用する。
'REQUEST_URI'に現在アクセスされているパスが格納されている。
因みに「プロトコル(httpsか?) + ホスト名(localhostなど) + パス(/index.phpなど) = 現在のURL」となる。

PHP 8以上ではstr_contains()を使用

strpos()をメインで説明していましたが、コメントにて「文字列が含まれるかどうかをチェックするには str_contains()を使うとよいのではないでしょうか」といただいたのでstr_contains()の内容を追加しました。ありがとうございます!

条件分岐

if( str_contains( $path, 'hogehoge' ) {
// $pathにhogehogeが含まれる場合

} else{
// $pathにhogehogeが含まれない場合

}

PHP 8で追加された関数str_contains()を使用すると、特定の文字列が含まれるかどうかの真偽値true/falseが返されるので、上記のように条件分岐できる。

PHP 7系以下ではstrpos()を使用

条件分岐

if( false === strpos( $path, 'hogehoge' ) {
// $pathにhogehogeが含まれない場合

} else{
// $pathにhogehogeが含まれる場合

}

strpos()は文字列が見つかった位置を整数で返すので上記で判定できる。
※類似の関数strstr()は最初に現れる場所を含めてそこから文字列の終わりまでを返す。
strpos()の方がメモリ消費が少ないので、PHP 7.4以下では文字列が含まれるかどうかの判定であればstrpos()を使うのがよい。

strpos()の注意点

検索対象が先頭に見つかる場合はstrpos()で0が返されるので注意。

if( strpos( 'apple', 'a' ) ) {
    // 'a' が 0 番目にあるので、boolean変換で偽になる
}

str_contains()と同じ感覚で使うとハマる可能性あり。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?