・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月24日に投稿されました。)
PHPで文字列の一部を取得する関数として、substr()があります。
substr()とは指定した文字列の一部を切り取る関数になります。
「abcde」という文字列があったとしてそれにsubstr()を使用すると、自分の好きなところの一部を文字列として返されます。
しかし、全角文字列はバイト数が異なるため、切り取る長さによっては文字化けを起こしてしまいます。
また、int型の文字列を指定した場合でも、文字列の一部を切り取ることはできますが、string型になって返ってきますので注意が必要です。
そして、substr()は文字列はもちろん、指定した配列の値の一部を取得することも可能です。
今回はPHPのsubstr()で文字列の一部を取得する方法について紹介していきます。
substr()とは
冒頭でも言いましたが、substr()とは、文字列の一部を切り出す関数となります。
例えば、「abcdefg」という文字列にsubstr()を使用すると、「abc」や「bcdefg」のように文字列の一部を返り値として返すようになります。
また、切り出す部分は自分で調整することが可能です。
substr()の書き方
substr()の書き方は下記のようになります。
1 | <?php substr('対象の文字列', '抜き出す文字の位置'[, '抜き出す文字の長さ']); ?> |
substr()のパラメータ
substr()のパラメータは下記のようになります。
- 対象の文字列(必須):
逆に並び替えたい文字列を指定する - 抜き出す文字の位置(必須):
抜き出す文字の文字をインデックス指定する - 抜き出す文字の長さ(任意):
抜き出す文字の長さをインデックスで指定する
substr()は必須のパラメータとして「対象の文字列」と「抜き出す文字の位置」を指定することで使用することができます。
また、任意パラメータとして「抜き出す文字の長さ」を3つ目のパラメータに指定すると、切り出す文字列の長さを調整することができます。
substr()で文字列の一部を取得するサンプルコード
substr()で文字列の一部を取得するサンプルコードについてご紹介します。
ここでは下記の3つの場合でsubstr()を使用してみます。
- 文頭から文字列の一部を取得する場合
- 末尾から文字列の一部を取得する場合
- 日本語の文字列の一部を取得する場合
文頭から文字列の一部を取得する場合
文頭から文字列の一部を取得する場合に、substr()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text1_1 = 'Cut out this text!'; echo '対象の文字列: '; echo $text1_1; $text1_2 = substr($text1_1, 8); echo '切り取った文字列: '; echo $text1_2; var_dump($text1_2); $text2_1 = 123456789; echo '対象の文字列: '; echo $text2_1; $text2_2 = substr($text2_1, 3); echo '切り取った文字列: '; echo $text2_2; var_dump($text2_2); ?> |
実行結果
パラメータである「抜き出す文字の位置」に正の数を指定することで、文頭を先頭にして数えた位置までの文字列を取得することができます。
そのため、「Cut out this text!」の一部である「this text!」が表示され、「123456789」の一部である「456789」が表示されています。
int型の文字列に対して、substr()を使用すると、int型ではなくstring型で返ってきますので注意してください!
末尾から文字列の一部を取得する場合
末尾から文字列の一部を取得する場合に、substr()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text3_1 = 'Cut out this text!'; echo '対象の文字列: '; echo $text3_1; $text3_2 = substr($text3_1, -10); echo '切り取った文字列: '; echo $text3_2."\n"; var_dump($text3_2); $text4_1 = 123456789; echo '対象の文字列: '; echo $text4_1; $text4_2 = substr($text4_1, -4); echo '切り取った文字列: '; echo $text4_2."\n"; var_dump($text4_2); ?> |
実行結果
パラメータである「抜き出す文字の位置」に負の数を指定することで、後ろから数えた位置を先頭にして文末までの文字列を取得することができます。
そのため、「Cut out this text!」の一部である「this text!」が表示され、「123456789」の一部である「456789」が表示されています。
全角文字列の一部を取得する場合
全角の文字列の一部を取得する場合に、substr()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text5_1 = 'ABCDEFG'; echo '対象の文字列: '; echo $text5_1."; $text5_2 = substr($text5_1, 2); echo '切り取った文字列: '; echo $text5_2."\n"; var_dump($text5_2); $text6_1 = 'あいうえお'; echo '対象の文字列: '; echo $text6_1; $text6_2 = substr($text6_1, 3); echo '切り取った文字列: '; echo $text6_2."\n"; var_dump($text6_2); ?> |
実行結果
全角の文字列に使用すると、抜き出すことはできますが、抜き出す位置によっては文字化けになってしまいます。
そのため、substr()は全角文字列には不向きとなります。
全角文字は1文字3バイトなので、「位置 × 3」にすると抜き出せますが、半角と混ざった文字列では対応が難しくなります。
抜き出す文字の長さを指定して文字列の一部を取得するサンプルコード
substr()に抜き出す文字の長さを指定して文字列の一部を取得するサンプルコードをご紹介します。
ここでは下記の2つの場合でsubstr()を使用してみます。
- 抜き出す文字の長さに正の整数を指定した場合
- 抜き出す文字の長さに負の整数を指定した場合
抜き出す文字の長さに正の整数を指定した場合
substr()の抜き出す文字の長さに正の整数を指定して、文字列の一部を取得してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text7_1 = 'Cut out this text!'; echo '対象の文字列: '; echo $text7_1; $text7_2 = substr($text7_1, -10, 4); echo '切り取った文字列: '; echo $text7_2; var_dump($text7_2); $text8_1 = 123456789; echo '対象の文字列: '; echo $text8_1."\n"; $text8_2 = substr($text8_1, 3, 4); echo '切り取った文字列: '; echo $text8_2; var_dump($text8_2); ?> |
実行結果
抜き出す文字の長さに正の整数を指定することで、抜き出した文字列の文頭から絶対値分の文字数を取得しています。
そのため、「Cut out this text!」の一部である「this」が表示され、「123456789」の一部である「4567」が表示されています。
「Cut out this text!」→「this text!」→「this」となり、「123456789」→「456789」→「4567」となります。
抜き出す文字の長さに負の整数を指定した場合
substr()の抜き出す文字の長さに負の整数を指定して、文字列の一部を取得してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text9_1 = 'Cut out this text!'; echo '対象の文字列: '; echo $text9_1; $text9_2 = substr($text1_1, -10, -6); echo '切り取った文字列: '; echo $text9_2."\n"; var_dump($text9_2); $text10_1 = 123456789; echo '対象の文字列: '; echo $text10_1; $text10_2 = substr($text10_1, 3, -3); echo '切り取った文字列: '; echo $text10_2; var_dump($text10_2); ?> |
実行結果
抜き出す文字の長さに負の整数を指定することで、抜き出した文字列の文末から絶対値分の文字数をカットし、抜き出した文字列の文頭から先ほどカットした部分の前までの文字を取得しています。
そのため、「Cut out this text!」では「this」が表示され、「123456789」では「4567」が表示されています。
「Cut out this text!」→「this text!」→「this」となり、「123456789」→「456789」→「456」となります。
substr()で配列の値の一部を取得するサンプルコード
substr()で配列の値の一部を取得するサンプルコードについてご紹介します。
ここでは、下記の2つの場合でsubstr()を使用してみます。
- 指定した配列の値の一部を取得する場合
- 指定した連想配列の値の一部を取得する場合
指定した配列の値の一部を取得する場合
指定した配列の値の一部を取得する場合にsubstr()を使用してみます。
ここでは、1次元配列と2次元配列の値の一部を取得してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $array1_1 = ['Jaanese','science', 'math', 'social', 'English']; echo '対象の1次元配列: '; var_dump($array1_1); $array1_2 = substr($array1_1[4], 3); echo '切り取った1次元配列配列の値: '; echo $array1_2; var_dump($array1_2); $array2_1 = [ ['Jaanese','science', 'math', 'social', 'English'], ['P.E','music', 'technology', 'Home economics', 'art'] ]; echo '対象の2次元配列: '; var_dump($array2_1); $array2_2 = substr($array2_1[1][2], 3, 7); echo '切り取った2次元配列の値: '; echo $array2_2; var_dump($array2_2); ?> |
実行結果
substr()によって指定した配列の値の一部を取得しています。
そのため、「English」の一部である「lish」、「technology」の一部である「hnology」が表示されています。
指定した連想配列の値の一部を取得する場合
指定した連想配列の値の一部を取得する場合にsubstr()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $array3_1 = array( '国語' => 'Japanese', '英語' => 'English', '数学' => 'Math', '社会' => 'Social', '理科' => 'Science' ); echo '対象の連想配列: '; var_dump($array3_1); $array3_2 = substr($array3_1['理科'], 3, 5); echo '切り取った連想配列の値: '; echo $array3_2; var_dump($array3_2); ?> |
実行結果
substr()によって指定した連想配列の値の一部を取得しています。
そのため、「Science」の一部である「ence」が表示されています。
全角文字列の一部を正確に取得したい場合
全角文字列の一部を正確に取得したい場合は、mb_substr()を使用します。
mb_substr()とは、マルチバイトの文字列の一部を抜き出す関数となります。
そもそも、マルチバイト文字列とは複数のバイトで成り立っている文字列のことであり、主に全角文字からなる文字列のことを指します。
つまり、mb_substr()を使用することで、ひらがなやカタカナ、漢字などの文字列の一部を正確に取得することができます。
また、全角と半角の文字が混ざった文字列でも正確に取得することができます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $text11_1 = '文章を切り取る!Cut out this text!'; echo '対象の文字列: '; echo $text11_1; $text11_2 = mb_substr($text1_1, 3, 12); echo '切り取った文字列: '; echo $text11_2; var_dump($text11_2); $text12_1 = 123456789; echo '対象の文字列: '; echo $text12_1; $text12_2 = mb_substr($text1_1, 2, -4); echo '切り取った文字列: '; echo $text12_2; var_dump($text12_2); ?> |
実行結果
mb_substr()によって全角と半角の文字が混ざった文字列が変換されています。
そのため、「文章を切り取る!Cut out this text!」では「切り取る!Cut out」が表示されています。
また、「123456789」では「345」が表示されています。
まとめ
⚫︎ substr()とは、文字列の一部を切り出す関数である
⚫︎ substr()を使用するには合計で3つのパラメータを指定できる
・ 対象の文字列(必須)
・ 抜き出す文字の位置(必須)
・ 抜き出す文字の長さ(任意)
⚫︎ substr()のパラメータである「抜き出す文字の位置」に正の数を指定すると、文頭を先頭にして数えた位置までの文字列を取得する
⚫︎ substr()のパラメータである「抜き出す文字の位置」に負の数を指定すると、後ろから数えた位置を先頭にして文末までの文字列を取得する
⚫︎ substr()は全角の文字列に使用すると、抜き出すことはできるが、抜き出す位置によっては文字化けになる
(全角文字列には不向き)
⚫︎ substr()のパラメータである「抜き出す文字の長さ」に正の整数を指定すると、抜き出した文字の文頭から絶対値分の文字を取得する
⚫︎ substr()のパラメータである「抜き出す文字の長さ」に負の整数を指定すると、抜き出した文字列の文末から絶対値分の文字をカットし、抜き出した文字列の文頭からカット前までの文字を取得する
⚫︎ substr()はパラメータとして配列の値を指定することができる
(普通の配列や連想配列でも可能)
⚫︎ 全角文字列の一部を正確に取得したい場合は、mb_substr()を使用する
(全角と半角の文字が混ざった文字列でもOK)