こんにちは!エンジニアのノムラです。
PHPには、文字列の中から、一部を指定して取得することができるsubstr、mb_substrという関数があります。
この記事では、
- substr、mb_substrを使った文字列の取得
- substrとmb_substrの違いは?
といった、文字列の一部を取得する方法についてや、
- 目的別に指定した文字列で処理を行う関数の紹介
という内容まで、PHPの勉強をはじめたばかりの方にもわかりやすく解説していきたいと思います。この記事で紹介する関数は、覚えていて必ず役に立つので、しっかりマスターしていきましょう!
substrを使って文字を切り出そう
substrとは、指定した文字列の一部を取得することができる関数です。例えば、abcdという文字列があったとします。
開始位置に0を指定すると、aから指定した文字数分の文字列を取得し、2を指定するとcから指定した文字数分の文字列を取得することができます。実際にサンプルコードを見ながら、substrの使い方を見ていきましょう。
<?php $str = “abcde”; echo substr($str,1); ?>
【出力結果】
bcde
上のサンプルコードでは、開始位置に1を指定し、文字数を指定していないため「b」から最後までの文字列が取得されています。
<?php $str = "abcde"; echo substr($str,1,3); ?>
【出力結果】
bcd
次に開始位置1から文字数3まで指定し、文字列「absde」から真ん中の3文字を取得することができました。
<?php $str = "あいうえお"; echo substr($str,1,3); ?>
同じコードでも、文字列が日本語だった場合は文字化けしてしまうので注意しましょう。
mb_substrで日本語を切り出そう
mb_substrも、指定した文字列の一部を取得する関数ですが、substrとの違いは何なのでしょうか?mb_substrは、開始位置、文字数の指定に加えて、文字列の文字コードの指定を行うことができます。
日本語の文字列を扱う場合は、mb_substrを使うようにしましょう! それでは、mb_substrも実際にサンプルコードで使い方を確認していきましょう。
<?php $str = "absde"; echo mb_substr($str,1,3); ?>
【出力結果】
bcd
半角文字を取得する場合は、substrと同じ、開始位置であるbから3文字分取得することができます。
<?php $str = "あいうえお"; echo mb_substr($str,1,3,"UTF-8"); ?>
【出力結果】
いうえ
エンコーディングにUTF-8を指定し、日本語の文字列の一部を取得することができました。
目的別!文字列の一部を操作する関数
substrとmb_substrを使って文字列の一部を取得する方法を解説しましたが、PHPには他にも文字列の一部を処理することができる関数があります。
substr_replaceで文字列の置換
substr_replaceでは、指定した文字列の一部を別の文字列に置換することができます。
substr_replace(元の文字列,置換する文字列,開始位置[,範囲])
実際に使ってみると、
<?php $str = "abcde"; echo substr_replace($str,"9",2,1); ?>
【出力結果】
ab9de
開始位置2である、cから1文字分の範囲を9に置換することができました。
substr_countで文字列の出現回数を取得
substr_countでは、文字列中に特定の文字が何回出現しているかを返してくれる関数です。
substr_count(検索対象の文字列,検索する文字列)
以下のサンプルコードでは、「PHP入門」に「P」が何回出現しているかを調べています。
<?php $str = "PHP入門"; echo substr_count($str,"P"); ?>
【出力結果】
2
「PHP入門」には2回「P」が含まれているため、2が出力されています。
substrでやりたいことが実現できなかったあなたへ
とある文字で分割したい場合
substr関数では開始位置から修了位置までの間の文字列を切り出して変数に格納する関数でした。他にも似たような関数にwordwrap関数があります。substr関数でやりたいことがうまく実現できなかった場合は一度ご覧ください。
とある文字で配列に変換したい場合
今回のsubstr関数の解説では一部分だけを切り出す使い方でした。次のような文字列をカンマで区切って配列に変換したい場合はexplode関数を使うと良いでしょう。
メロン,スイカ,みかん,りんご
こちらもsubstr関数でうまくやりたいことが解決しなかった場合、一度ご覧ください!
まとめ
- substr、mb_substrを使った文字列の一部を取得する方法
- substr_replaceやsubstr_countを使って文字列の一部を処理する方法
などを解説してきました。PHPには、多くの関数があるので使い方を理解して、しっかりマスターしていきましょう。