BeginnerEngineerBlog
中の人
中の人

【php8 strpos str_contains】文字列の中の特定の文字列の判定

公開: 2024-04-24 00:27
更新: 2024-04-24 08:49
19
php8系 strpos str_contains メモ
「php文字列特定の文字列」とかで検索するとまだまだstrposとかがヒットしやすいので個人的なメモ

こんにちは!

中の人です!

文字列の中から特定の文字列を検索したい場合、「strpos」だったり、「preg_match」とかがよく検索結果にヒットします

ただ、「strpos」て関数見ると

あれ、確かこれに代わる関数推奨されていたような、なかったような。。別の関数だっけ?

とまたググったりするので、個人的にメモろうと思います


str_contains


これ

ちなみにphp8で追加された関数です

なのでphp7系を利用している場合はstrposとかでやるしかない


使用例


<?php

$string = 'ビギナーエンジニアブログ';

$needle = 'ビギナー';
if (str_contains($string, $needle)) {
    echo "hei! beginner!\n";
} else {
    echo "go home!\n";
}

これの実行結果は



<?php

$string = 'ビギナーエンジニアブログ';

$needle = 'おすおす';
if (str_contains($string, $needle)) {
    echo "hei! beginner!\n";
} else {
    echo "go home!\n";
}

これは


こう


strposがあるのになんでstr_containsが実装されたか



<?php

$string = 'ビギナーエンジニアブログ';

$needle = 'ビギナー';
if (strpos($string, $needle)) {
    echo "hei! beginner!\n";
} else {
    echo "go home!\n";
}

これの実行結果は


すいません帰ります(´・ω・`)カエリマス..

strposは文字の位置を返す


つまり

<?php

$string = 'ビギナーエンジニアブログ';

$needle = 'ビギナー';
$result = strpos($string, $needle);
echo $result;
echo "\n";

これの実行結果は


見つかった検索文字の先頭の文字の位置を返すので、0が返ります

つまり「緩やかな比較」の場合、検索文字列がヒットしたとしても、先頭でヒットすると0(false)になってしまいます。


strposは検索文字列が見つからなかった場合falseを返す


そんで、検索対象が見つからなかった場合はfalseを返します


strposで正しく比較するには


つまりつまり、true,falseを判定するには

<?php

$string = 'ビギナーエンジニアブログ';

$needle = 'ビギナー';
if (strpos($string, $needle) !== false) {
    echo "hei! beginner!\n";
} else {
    echo "go home!\n";
}

こんな感じで、一見なんだかよくわからない比較の書き方をしないと、正しく判定できません

なので、ちょっとわかりにくくね?ってことでstr_containsが追加されたっぽいです



終わりに


これについて書いてくれいている方いっぱいいるんですけど、なんかサクっとヒットしてくれないので個人的にメモしました

おやすみなさい
0
0
0
0
通信エラーが発生しました。
似たような記事