【PHP】substrやmb_substrを使って文字列を簡単に切り出そう!

こんにちは!エンジニアのノムラです。

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関数でやりたいことがうまく実現できなかった場合は一度ご覧ください。

【PHP】こんな関数あったんだ!wordwrapでラクして文字列を分割する
更新日 : 2018年4月28日

とある文字で配列に変換したい場合

今回のsubstr関数の解説では一部分だけを切り出す使い方でした。次のような文字列をカンマで区切って配列に変換したい場合はexplode関数を使うと良いでしょう。

メロン,スイカ,みかん,りんご

こちらもsubstr関数でうまくやりたいことが解決しなかった場合、一度ご覧ください!

【PHP explode】文字列を分割する方法を3つのポイントで簡単理解
更新日 : 2019年3月27日

まとめ

  • substr、mb_substrを使った文字列の一部を取得する方法
  • substr_replaceやsubstr_countを使って文字列の一部を処理する方法

などを解説してきました。PHPには、多くの関数があるので使い方を理解して、しっかりマスターしていきましょう。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ノムラ

ノムラ

WEBエンジニアをやっています。
プログラミング初心者にもわかりやすく解説ができるよう頑張ります。