【PHP】substr()で文字列の一部を取得する!
(*このページは2021年5月5日に更新されました。)
PHPのsubstr()関数を使用することで指定した文字列の一部を取得することができます。
substr()は文字列の一部を取り出す関数であり、指定したパラメータの文字列のn文字目からm文字目の間にある文字列を返します。
しかし、半角文字では1文字1バイトに対して、全角文字では1文字3バイトとなるためパラメータの指定に注意してください。
また、バイト数を計算することなく簡単に文字列の一部を取得したい場合は、mb_substr()関数を使用しましょう。
今回はPHPのsubstr()関数で文字列の一部を取得する方法について以下の内容を解説していきます。
⚫︎ substr()を使用する際の注意点
⚫︎ 位置を設定して文字列の一部を取得する場合
⚫︎ 位置と長さを設定して文字列の一部を取得する場合
⚫︎ 位置を末尾から設定して文字列の一部を取得する場合
⚫︎ 簡単に全角文字列の一部を取得する方法
目次
substr()関数とは
substr()関数とはパラメータで与えられた文字列の何文字目から何文字目を返す関数となります。
substr()の書き方
substr()の書き方は下記となります。
1 |
substr(対象の文字列, 開始位置 [,長さ] ) |
substr()のパラメータ
⚫︎ 対象の文字列:
一部を取得したい対象の文字列を指定する
⚫︎ 開始位置:
取得を開始したい位置をインデックスで指定する
⚫︎ 長さ:
どのくらいの長さを取得するのかインデックスで指定する
(2なら2文字だけ取得する)
substr()に対象の文字列と開始位置を指定することで、対象の文字列の開始位置からの文字列を返すようになります。
また、対象の文字列と開始位置と長さを指定することで、対象の文字列の開始位置からn文字目までの文字列を返すようになります。
substr()を使用する際の注意点
substr()を使用する際は以下の内容に注意してください。
⚫︎ 全角文字は1文字につき、3バイト使用する
substr()でひらがなやカタカナや漢字などの全角文字の一部を取得する場合は1文字につき、3バイト使用することになりますので「文字数 × 3」で開始値や長さを設定しなければなりません。
例
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php echo "・全角の文字列の一部取得する"; $text1 = "あいうえおみかん"; echo '対象の文字列: '.$text1; $text1_length = substr($text1, 15); echo '文字列の一部: '.$text1_length; $text2 = "諸行無常の響きあり"; echo '対象の文字列: '.$text2; $text2_length = substr($text2, 0, 12); echo '文字列の一部: '.$text2_length; ?> |
出力結果
・全角の文字列の一部取得する
対象の文字列: あいうえおみかん
文字列の一部: みかん
対象の文字列: 諸行無常の響きあり
文字列の一部: 諸行無常
「あいうえお」の「お」までは5文字目ですが、開始位置が15となります。
また、「諸行無常」のまでは4文字目ですが、長さが12となります。
文字列の一部を取得するサンプルコード
文字列の一部を取得するサンプルコードをご紹介します。
取得位置を設定して文字列の一部を取得する場合
substr()で取得位置を設定して文字列の一部を取得する場合は、対象の文字列と開始位置を指定します。
例
出力結果
・開始位置を設定して文字列の一部を取得する
対象の文字列: ABCDEFGH123456
文字列の一部: 123456
対象の文字列: ABCアイウ
文字列の一部: アイウ
substr()によって決まった位置から文字列の一部が表示されています。
位置と長さを設定して文字列の一部を取得する場合
substr()で位置と長さを設定して文字列の一部を取得する場合は、対象の文字列と開始位置と長さを指定します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php echo "・開始位置と長さを設定して文字列の一部を取得する"; $text1 = "ABCDEFGH123456JKLMN"; echo "\n"; echo '対象の文字列: '.$text1; $text1_length = substr($text1, 8, 6); echo "\n"; echo '文字列の一部: '.$text1_length; $text2 = "ABCアイウエdef"; echo "\n"; echo '対象の文字列: '.$text2; $text2_length = substr($text2, 9, 12); echo "\n"; echo '文字列の一部: '.$text2_length; ?> |
出力結果
・開始位置と長さを設定して文字列の一部を取得する
対象の文字列: ABCDEFGH123456JKLMN
文字列の一部: 123456
対象の文字列: ABCアイウエdef
文字列の一部: アイウエ
substr()で対象の文字列と開始位置と長さを指定することで、開始位置と長さを設定して文字列の一部を取得しています。
位置を末尾から設定して文字列の一部を取得する場合
substr()で位置を末尾から設定して文字列の一部を取得する場合は、開始位置に負の整数を指定します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php echo "・開始位置を末尾から設定して文字列の一部を取得する"; $text1 = "ABCDEFGH123456JKLMN"; echo "\n"; echo '対象の文字列: '.$text1; $text1_length = substr($text1, -5); echo "\n"; echo '文字列の一部: '.$text1_length; $text2 = "ABCアイウエdef"; echo "\n"; echo '対象の文字列: '.$text2; $text2_length = substr($text2, -9, 9); echo "\n"; echo '文字列の一部: '.$text2_length; ?> |
出力結果
・開始位置を末尾からに設定して文字列の一部を取得する
対象の文字列: ABCDEFGH123456JKLMN
文字列の一部: JKLMN
対象の文字列: ABCアイウエdef
文字列の一部: def
開始位置に負の整数を指定することで、末尾を開始位置として文字列の一部を取得しています。
簡単に半角全角文字列の一部を取得する方法
substr()の使い方は分かったものの、半角と全角が混ざった文字列の一部を取得する際に「文字位置 × 3バイト」で計算しないといけない為、少し面倒です。
しかし、mb_substr()関数を使用するとバイト数を気にしないで簡単に半角や全角の文字列の一部を取得することができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php echo "・半角や全角の文字列の一部を取得する"; $text1 = "あいうえおABCDE01234"; echo "\n"; echo '対象の文字列: '.$text1; $text1_length = mb_substr($text1, 2, 5, "utf-8"); echo "\n"; echo '文字列の一部: '.$text1_length; $text2 = "かきくけこFGHIJ56789"; echo "\n"; echo '対象の文字列: '.$text2; $text2_length = mb_substr($text1, 4, 8, "utf-8"); echo "\n"; echo '文字列の一部: '.$text2_length; ?> |
出力結果
・半角や全角の文字列の一部を取得する
対象の文字列: あいうえおABCDE01234
文字列の一部: うえおAB
対象の文字列: かきくけこFGHIJ56789
文字列の一部: おABCDE01
半角全角が混ざっておりますが、バイトの計算をすることなく文字列の一部を取得しています。
今回のポイント
substr()で指定した文字列の一部を取得する
PHPで指定した文字列の一部を取得するにはsubstr()を使用する。
⚫︎ substr()のパラメータには対象の文字列と開始位置と長さを指定する
(対象の文字列と開始位置は必須パラメータ)
⚫︎ substr()を使用する際の注意点として、全角文字の一部を取得する場合は1文字につき、3バイト使用することになる
⚫︎ substr()で取得位置を設定して文字列の一部を取得する場合、対象の文字列と開始位置を指定する
⚫︎ substr()で位置と長さを設定して文字列の一部を取得する場合、対象の文字列と開始位置、長さを指定する
⚫︎ substr()で開始位置に負の整数を指定すると、位置を末尾から設定して文字列の一部を取得することができる
⚫︎ 簡単に半角全角文字列の一部を取得するには、mb_substr()関数を使用する
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。