PHPで文字列を切り出す2つの方法!(substr, mb_substr)

PHP

PHPで文字列を切り出す方法について書いています。
PHPで文字列を切り出すには、下記の関数を使うことができます。

・substr関数
・mb_substr関数

mb_substr関数はマルチバイト対応関数なので、日本語を切る場合などに使います。
サンプルコードはPHPバージョン8.1.4で、検証しています。

substr関数で切り出す

substr関数で文字列を切り出す方法です。
先頭から文字を見て、切り出す方法と、末尾から文字列を見て切り出すことができます。

公式のドキュメントはこちらです。

先頭から切り出す

先頭から文字列を切り出す場合には、substr関数に0以上の正数を渡します。
例えば、下記のように使います。

<?php
$text = "hello, world";

echo substr($text, 7); // world
echo substr($text, 0, 5); // hello

$text変数に切り出す文字列の「hello, world」を代入しました。

次にsubstr関数を使って、文字列を切り出しています。
第1引数に切り出す対象の文字列「$text」を入れて、第2引数に切り出す位置「7」を入れています。
こうすると、文字列の先頭(0番目)から数えて、7番目の「w」以降が切り取られて返ってきます。
結果「world」が出力されます。

最後にsubstr関数の第1引数に「0」を渡して、第2引数に「5」を渡しています。
こうすると第1引数の文字位置から、第2引数で渡した数で文字を返します。
結果、0番目から5文字返します。そのため出力結果は「hello」となります。

日本語など、マルチバイト文字をsubstr関数で切ろうとすると、文字化けします。
日本語の場合にはmb_substr関数を使いましょう。

末尾から切り出す

末尾から文字列を切り出す場合には、substr関数に-1以下の負数を渡します。
例えば、下記のように使用して、末尾から文字を切り取ります。

$text = "This is a pen";

echo substr($text, -3); // pen
echo substr($text, -8, 4); // is a

$text変数に切り出す文字列の「This is a pen」を代入しました。

次に、文字列を末尾から切り出しています。
substr関数の第1引数に切り取る文字列、第2引数に「-3」を指定しました。

負数を渡すことで、末尾から数えることが可能です。
末尾から数えて3番目の「p」から文字列の最後までが返ってきて、出力結果は「pen」になります。

次はsubstr関数に、引数を3つ渡しました。
第1引数に切り取る文字列、第2引数に「-8」、第3引数に「4」です。
こうすると、切り取り文字列の末尾から8番目の箇所から、4文字切り取ります。
そのため、出力結果は「is a」になります。

substr関数のまとめ

substr関数についてのまとめです。

引数

第1引数と第2引数を渡した場合は、第1引数の文字列を第2引数の位置から末尾まで切り取りました。

substr("切り取る文字列", "切り取り開始位置");

第1引数と第2引数と第3引数を渡した場合です。
この時には、第1引数の文字列を、第2引数の文字位置から第3引数で指定した個数で切り取りました。

substr("切り取る文字列", "切り取り開始位置", "切り取る個数");

戻り値

切り取った文字列が返ってきます。
返す文字がない場合には空文字("")が返ってきます。

mb_substr関数で切り出す

mb_substr関数でも、文字列を切り出すことができます。
こちらの関数はsubstr関数のマルチバイト処理するための関数です。日本語文字列を切り取ることができます。

公式のドキュメントはこちらです。

先頭から切り出す

mb_substr関数も0以上の正数を渡すことで、文字列の先頭から参照して、切り出します。
例えば、下記のように使います。

$text = "ハロー、ワールド!";

echo mb_substr($text, 4); // ワールド!
echo mb_substr($text, 0, 3); // ハロー

$text変数に、切り取り対象の文字列「ワールド!」を代入しました。

次にmb_substr関数を使って、文字列を切り取っています。
第1引数に切り取り文字列で、第2引数に切り取り開始位置です。
4番目の位置から末尾まで切り取られて、出力すると「ワールド!」が出力されました。

次に引数を3つ渡しています。こちらもsubstrと同様に動作します。
第1引数に切り取り文字列で、第2引数に切り取り開始位置、第3引数に切り取る個数になります。
0番目から3個切り取るので、出力すると「ハロー」が出力されました。

末尾から切り出す

mb_substr関数でも-1以下の負数を渡すことで、文字列の末尾から参照して、切り出します。
例えば、下記のように使います。

$text = "はまち まぐろ サーモン たまご";

echo mb_substr($text, -3); // たまご
echo mb_substr($text, -8, 4); // サーモン

$text変数に、切り取り対象の文字列「はまち まぐろ サーモン たまご」を代入しました。

次にmb_substr関数の第2引数に-3を指定しています。
これで、文字列の末尾から3つ目の位置から、末尾までを切り取って返します。
結果、「たまご」が出力されました。

次にmb_substr関数の第2引数に-8を、第3引数に4を指定しています。
文字列の末尾から8つ目の位置から、4文字切り取られて返ってきます。
結果、「サーモン」が出力されました。

mb_substr関数もsubstr関数と同様に動作することが確認できました。

コメント

タイトルとURLをコピーしました