substr/mb_substr関数の使い方(文字列の一部を取得)

PHP で用意されている組み込み関数の一つである substr 関数および mb_substr 関数の使い方です。 substr 関数は文字列の中から指定した位置から指定した分だけバイト数で指定して文字を取り出します。また mb_substr 関数は文字数で指定して文字を取り出します。

(2022 年 09 月 28 日公開 / 2022 年 09 月 28 日更新)

substr関数の書式と基本的な使い方

substr 関数は次のように定義されています。

substr
string substr(string string, int start [, int length])
引数に指定した文字列から一部分を取り出します。開始位置だけを指定した
場合は指定した場所から最後までを取り出し、長さも指定した場合は指定し
た位置から指定した長さだけの文字列を取り出します。
位置の指定や長さはバイト数で指定してます。

引数:
  string  対象の文字列
  start  取り出し開始位置(0なら先頭)
  length  取り出す文字のバイト数
返り値:
  取り出した文字列

実際の例で見てみます。

substr('abcde', 0, 2) --> ab
substr('abcde', 1, 3) --> bcd
substr('abcde', 4) --> de
substr('あいう', 2, 2) --> い

バイト数で指定するため、全角文字が含まれる文字列に対して行う場合は注意が必要です。全角文字は1文字が2バイトですので、中間の位置などを指定してしまうと、どのような結果となるか分かりません。

また開始位置をマイナスの値で指定した場合、文字列の最後の位置から先頭に向かって何文字目かという意味になります。

substr('abcde', -2, 2) --> de
substr('abcde', -3) --> cde

文字数で指定した場合には「mb_substr」関数を使います。半角文字も全角文字も1文字は1文字として扱います。

mb_substr
string mb_substr(string str, int start [, int length [, string encoding]])
引数に指定した文字列から一部分を取り出します。開始位置だけを指定した
場合は指定した場所から最後までを取り出し、長さも指定した場合は指定し
た位置から指定した長さだけの文字列を取り出します。
位置の指定や長さは文字数で指定してます。

引数:
  string  対象の文字列
  start  取り出し開始位置(0なら先頭)
  length  取り出す文字数
  encoding  文字コード
返り値:
  取り出した文字列
サンプルコード

では実際に試してみます。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$str1 = 'abcdef';
$substr1 = substr($str1, 0, 1);
$substr2 = substr($str1, 2, 3);

print($str1.' の0バイトから1バイト取り出すと '.$substr1.' です<br>');
print($str1.' の2バイトから3バイト取り出すと '.$substr2.' です<br><br>');

$str2 = 'こんにちは';
$substr3 = substr($str2, 2, 2);
$substr4 = mb_substr($str2, 2, 2);

print($str2.' の2バイトから2バイト取り出すと '.$substr3.' です<br>');
print($str2.' の2文字目から2文字取り出すと '.$substr4.' です<br>');

?>
</body>
</html>

上記ファイルを Web サーバに設置しブラウザ経由で見ると下記のように表示されます。

substrのテスト

-- --

PHP で用意されている組み込み関数の一つである substr 関数および mb_substr 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。