勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

PHP8系からは文字列検索はstrposよりstr_containsが良さそう

  PHP

PHP8.0のアップデートに関する記事を読んでいたところstr_contains()という関数が追加されているのに気付いたので確認してみると文字列検索に使う関数らしい。文字列検索だと今まではstrposを使用していたけど、str_containsの方がシンプルで良さそう。以下に使い方等をメモ。

 

利用方法

ソースコード

<?php
$search = 'あ';
$msg = 'あいうえお';

#strposの場合
if( strpos($msg, $search) !== false ){
    echo '「' . $search . '」は含まれています';
}else{
    echo '「' . $search . '」は含まれていません';
}

#str_containsの場合
if( str_contains($msg, $search) ){
    echo '「' . $search . '」は含まれています';
}else{
    echo '「' . $search . '」は含まれていません';
}

実行速度について

ベンチマークを測定した記事を見るとほぼ変わらない模様。ただ、記事内にもある通りstr_containsはbool値を返すのに対し、strposはint / falseを返すためあんまり直感的とは言えない。

その他

strposはリファレンスによると「文字列内の部分文字列が最初に現れる場所を見つける」関数となっており、文字列検索とはちょっと意図が違うっぽい。そういった部分も含めてPHP8系からはstr_containsを使っていった方が良さそう。

 

リファレンス

str_contains

https://www.php.net/str_contains

 - PHP

  関連記事

PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法
PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法

PHP8系で「Fatal error: Uncaught TypeError: ...

PHPにてmicrotimeで秒数を測定した際「xxxxxE-5」のような値になる場合の対応方法
PHPにてmicrotimeで秒数を測定した際「xxxxxE-5」のような値になる場合の対応方法

PHPで過去記事を参考の上、あるプログラムの処理にかかった時間を測定しようとした ...

PHPで特定のサイトからのリクエストのみ受け付けて処理する方法
PHPで特定のサイトからのリクエストのみ受け付けて処理する方法

指定したサイトからのリクエストのみ受け付けて処理したいという状況があった。その他 ...

PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法
PHPでフォーム送信の際に禁止ワードのチェック及び制限をかける方法

掲示板等のformを送信する際に特定の禁止ワードが含まれていないかチェックするプ ...

PHPで配列の値(value)が空の要素を削除する方法
PHPで配列の値(value)が空の要素を削除する方法

PHPの配列でキー(key)は入っていて値(value)が入っていない要素を削除 ...