PHPで文字列から一部を抽出する!substr()とmb_substr()の使い方
生徒
「PHPで文章や文字列の一部だけを取り出すことはできますか?」
先生
「PHPでは、substr()やmb_substr()を使うと、文字列から必要な部分だけを抽出できます。」
生徒
「文字列の一部を抽出するって、どういう意味ですか?」
先生
「たとえば、商品コードの先頭だけ取り出したり、長い文章の最初だけ表示したりすることです。」
生徒
「日本語でも使えますか?」
先生
「日本語を扱う場合は、mb_substr()を使うのが安心です。順番にわかりやすく見ていきましょう。」
1. PHPで文字列の一部を抽出するとは?
PHPで文字列の一部を抽出するとは、文章や単語の中から必要な部分だけを取り出すことです。文字列とは、名前、メールアドレス、商品名、住所、説明文、ブログ記事の本文など、文字が並んだデータのことです。PHPでWebサイトやWebアプリケーションを作るとき、文字列をそのまま全部使うのではなく、先頭の数文字だけ表示したり、特定の位置から文字を取り出したりする場面があります。
たとえば、商品コードABC12345の先頭三文字だけを取り出して分類コードとして使う、長い説明文の最初の十文字だけを表示する、会員番号の一部を画面に出す、といった処理です。このような文字列操作でよく使うのが、PHPのsubstr()とmb_substr()です。
プログラミング未経験の方は、文字列の抽出を「長い紙テープから必要な部分だけを切り取る作業」と考えるとわかりやすいです。紙テープ全体が文字列で、切り取りたい開始位置と長さを指定すると、その部分だけを取り出せます。PHPの文字列操作では、この開始位置と文字数の考え方がとても大切です。
2. substr()とは?英数字の文字列を取り出す関数
substr()は、PHPで文字列の一部を取り出すための関数です。関数とは、決められた処理を簡単に使えるようにした道具のようなものです。substr()では、対象となる文字列、取り出しを始める位置、取り出す長さを指定します。
ここで大切なのは、PHPでは文字の位置を数えるとき、最初の文字を一番ではなくゼロ番として数えることです。たとえば、ABCDEという文字列では、Aがゼロ番、Bが一番、Cが二番になります。初心者の方は、このゼロから数える考え方に最初は戸惑いやすいですが、PHPの配列や文字列操作でもよく出てくる基本です。
$text = "ABCDE";
$result = substr($text, 1, 3);
echo $result;
BCD
この例では、ABCDEという文字列の一番の位置から三文字を取り出しています。ゼロ番がAなので、一番はBです。そのため、結果はBCDになります。PHPのsubstr()は、英数字のコードや短い文字列を扱うときに便利です。
3. substr()の基本構文を理解する
substr()の基本構文は、文字列、開始位置、長さの順番で指定します。開始位置とは、どこから取り出しを始めるかという意味です。長さとは、そこから何文字分を取り出すかという意味です。順番を間違えると、思った通りの結果にならないため、まずは基本の形をしっかり覚えましょう。
| 書き方 | 意味 |
|---|---|
substr($text, 0, 3) |
文字列の先頭から三文字を取り出す |
substr($text, 2, 4) |
二番目の位置から四文字を取り出す |
substr($text, -3) |
文字列の後ろから三文字を取り出す |
次の例では、商品コードの先頭部分だけを取り出しています。商品コードや会員番号などは、決まった位置に意味がある場合があります。先頭の文字で種類を分けたり、途中の数字で分類したりする場合に、substr()が役立ちます。
$itemCode = "ABC-2026";
$category = substr($itemCode, 0, 3);
echo "分類コードは" . $category . "です";
分類コードはABCです
このプログラムでは、商品コードの先頭から三文字を取り出しています。ABC-2026の先頭三文字はABCなので、分類コードとして表示されています。PHPの文字列抽出は、管理番号、商品コード、注文番号、ファイル名などを扱うときにもよく使われます。
4. 後ろから文字を取り出す方法
substr()では、開始位置にマイナスの数を指定すると、文字列の後ろから数えて取り出すことができます。たとえば、ファイル名の末尾を確認したい場合や、コードの最後の数字だけを取り出したい場合に便利です。
身近な例でいうと、長い番号の最後の四桁だけを見るようなものです。番号全体ではなく、後ろの一部だけが必要な場面はよくあります。PHPの文字列操作でも、後ろから取り出す考え方を知っておくと、実用的なプログラムが書きやすくなります。
$filename = "photo.jpg";
$extension = substr($filename, -3);
echo $extension;
jpg
この例では、photo.jpgというファイル名の後ろ三文字を取り出しています。その結果、jpgという拡張子が取得できます。拡張子とは、ファイルの種類を表す文字のことです。画像ファイルならjpgやpng、文書ファイルならpdfなどがあります。
ただし、実際のファイル処理では、拡張子の長さが三文字とは限りません。そのため、この例はsubstr()で後ろから取り出す考え方を理解するための基本例として見てください。
5. mb_substr()とは?日本語の文字列を安全に取り出す関数
PHPで日本語を含む文字列から一部を抽出する場合は、mb_substr()を使うのが安心です。mbはマルチバイトの略です。マルチバイトとは、ひとつの文字を複数のバイトで表す文字のことです。日本語のひらがな、カタカナ、漢字は、英字よりも複雑な形でコンピュータに保存されるため、通常のsubstr()では途中で文字が切れてしまうことがあります。
初心者の方は、英数字だけならsubstr()、日本語を含む文章ならmb_substr()と覚えるとわかりやすいです。ブログ記事の本文、商品説明、ニュース見出し、問い合わせ内容など、日本語の文章を短く表示したい場合にはmb_substr()を使いましょう。
$text = "PHP入門講座";
$result = mb_substr($text, 0, 5);
echo $result;
PHP入門
この例では、PHP入門講座という日本語を含む文字列から、先頭五文字を取り出しています。mb_substr()を使うことで、日本語の文字も文字単位で安全に扱えます。PHPで日本語の文字列操作を行う場合、mb_substr()はとても大切な関数です。
6. substr()とmb_substr()の違い
substr()とmb_substr()は、どちらも文字列の一部を抽出するための関数ですが、得意な文字の種類が違います。substr()は主に英数字の文字列で使いやすく、mb_substr()は日本語を含む文字列で使いやすい関数です。
PHPで日本語を扱うWebサイトを作る場合、商品名、説明文、ブログ本文、ニュースタイトル、ユーザーの入力文などに日本語が含まれることが多くあります。そのため、日本語の文字数を指定して一部だけを表示したい場合は、mb_substr()を選ぶと安心です。
| 関数 | 主な用途 | 向いている文字列 |
|---|---|---|
substr() |
文字列の一部を抽出する | 英数字や記号を中心にした文字列 |
mb_substr() |
日本語を含む文字列の一部を抽出する | ひらがな、カタカナ、漢字を含む文字列 |
文字コードという言葉も関係します。文字コードとは、コンピュータが文字を扱うための決まりのことです。現在のWebサイトではUTF-8がよく使われています。mb_substr()では、必要に応じて文字コードを指定することもできます。
$text = "こんにちはPHP";
$result = mb_substr($text, 0, 5, "UTF-8");
echo $result;
こんにちは
この例では、文字コードとしてUTF-8を指定しています。日本語を安全に扱うためには、文字コードを意識することも大切です。初心者の段階では、まず日本語を切り出すときはmb_substr()を使うと覚えておくと実用的です。
7. 長い文章を短く表示する使い方
PHPのmb_substr()は、長い文章を短く表示したいときにも便利です。たとえば、ブログ記事一覧や商品一覧では、説明文をすべて表示すると画面が長くなりすぎることがあります。そのような場合、先頭の何文字かだけを表示して、詳細ページで全文を読めるようにすることがあります。
これは、新聞やニュースサイトで見出しと短い説明だけを表示するイメージです。最初の部分だけを見せることで、画面が見やすくなり、ユーザーも内容を素早く確認できます。PHPの文字列抽出は、見た目を整えるためにもよく使われます。
$description = "この商品は初心者にも使いやすい便利な学習教材です";
$shortText = mb_substr($description, 0, 15, "UTF-8");
echo $shortText . "続きを見る";
この商品は初心者にも使いや続きを見る
この例では、商品説明の先頭十五文字だけを取り出しています。長い文章を短くして表示することで、一覧画面がすっきりします。PHPでブログ、ニュース、商品一覧、管理画面を作るときには、mb_substr()を使った文字数制限がとても役立ちます。
8. 取り出す位置と長さを間違えないための考え方
substr()やmb_substr()を使うときに初心者がつまずきやすいのは、開始位置と長さの考え方です。開始位置は、どこから取り出しを始めるかです。長さは、そこから何文字取り出すかです。特に開始位置はゼロから数えるため、最初の文字を取り出したい場合はゼロを指定します。
たとえば、先頭から三文字を取り出すなら、開始位置はゼロ、長さは三です。二文字目から三文字を取り出すなら、開始位置は一、長さは三です。人間の感覚では一番目、二番目と数えますが、PHPではゼロ番、一番と数える場面が多いので注意しましょう。
先頭から取り出す場合は開始位置を0にする、と覚えると間違いにくくなります。
$text = "abcdef";
echo substr($text, 0, 2) . "\n";
echo substr($text, 2, 2) . "\n";
echo substr($text, 4, 2);
ab
cd
ef
この例では、文字列を二文字ずつ取り出しています。開始位置をゼロ、二、四と変えることで、取り出す場所が変わります。PHPの文字列抽出では、開始位置を少し変えるだけで結果が大きく変わるため、サンプルを実行しながら確認すると理解しやすくなります。
9. PHPで文字列抽出を使う実用場面
PHPのsubstr()とmb_substr()は、実際のWeb開発でもよく使われます。商品コードの一部を取り出す、ファイル名の一部を確認する、長い文章を短く表示する、ブログ記事の抜粋を作る、会員番号の先頭部分を分類に使うなど、文字列操作の基本として幅広く活用できます。
英数字だけのコードや番号を扱う場合はsubstr()が使いやすく、日本語を含む文章やタイトルを扱う場合はmb_substr()が向いています。特に日本語のWebサイトでは、商品名、説明文、記事タイトル、問い合わせ内容など、日本語の文字列を扱う機会が多いため、mb_substr()の使い方を知っておくと安心です。
PHP初心者の方は、まず文字列を変数に入れる、開始位置を指定する、取り出す長さを指定する、結果をechoで表示する、という流れを何度か練習するとよいでしょう。文字列抽出は、難しい処理に見えるかもしれませんが、考え方は必要な部分だけを切り取るというシンプルなものです。
PHPで文字列操作を学ぶと、検索、置換、分割、結合、抽出など、Webアプリケーションに必要な処理が少しずつ理解できるようになります。substr()とmb_substr()は、文字列から一部を取り出す基本の関数として、入力フォーム、管理画面、商品一覧、記事一覧、ファイル処理などで役立つ大切な知識です。