php strposを使って文字列の中に指定した文字列の位置を取得する

php strposを使って文字列の中に指定した文字列の位置を取得する

phpで、strposを使用して、文字列の中に指定した文字列の位置を取得するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

strpos使い方

strposを使用すれば、文字列の中に指定した文字列の位置を取得することが可能です。

strpos(文字列, 検索したい文字列);
// 存在した場合は、文字列の見つかった位置を返す。
// なければfalseが返ります。

以下は、文字列の中に指定した文字列の位置を取得するサンプルコードとなります。

<?php

$str1 = 'abcde';
$str2 = 'b';
$str3 = 'cd';
$str4 = 'f';

var_dump(strpos($str1, $str2));
// int(1)

var_dump(strpos($str1, $str3));
// int(2)

var_dump(strpos($str1, $str4));
// bool(false)

日本語でも動作しますが、マルチバイトに対応してないため「本日は」までは、1文字3バイトで計算されるため「9」が返ってきます。

<?php

$str1 = '本日は晴天なり';
$str2 = '晴天';

var_dump(strpos($str1, $str2));
// int(9)

日本語などのマルチバイト文字列が含まれる場合は「mb_strpos」を使用することで、見たまま1文字として扱うことができます。

<?php

$str1 = '本日は晴天なり';
$str2 = '晴天';

var_dump(mb_strpos($str1, $str2));
// int(3)

サロゲートペアの絵文字も対応してそうですが、

<?php

$str1 = '👨👩🍺';
$str2 = '🍺';

var_dump(mb_strpos($str1, $str2));
// int(2)

7文字で1文字の「👨‍👩‍👧‍👦」には対応してなさそうです。

<?php

$str1 = '👨‍👩‍👧‍👦🍺';
$str2 = '🍺';

var_dump(mb_strpos($str1, $str2));
// int(8)