【PHP】string型の特徴と文字列の操作方法を解説

PHPのstring型(文字列型)について、理解できていますか?

PHPに限らず、あらゆるプログラミング言語では、日本語や英語などの文字列をプログラム内で取り扱うために、文字列を格納するための型が用意されています。しかし、PHPの文字列ではシングルコートやダブルコートの違いが分からなかったり、文字列を操作する関数が多くて覚えるのに苦労する人も多いことでしょう。

そこで今回は、

・PHPのstring型の特徴
・文字列の操作方法とよく利用する関数

について解説します。

string型の基本

PHPでは、文字を取り扱うためのデータ型「string型」が用意されています。ここでは、string型を理解するうえで基本となる文字列リテラルエスケープシーケンスについて解説し、PHPで文字列リテラルを表現するための方法について解説していましょう。

文字列リテラル(string literal)の意味

文字列リテラル(string literal)とは、PHPを含む多くのプログラミング言語で見られる、文字が0文字以上連続しているものです。PHPにおける文字列リテラルの例を以下のサンプルコードに示します。サンプルコード内で黄土色でハイライトされている部分が「文字列リテラル」です。

文字列リテラルは、プログラム内において変数に格納したり、直接関数の引数として渡したりすることができます。特にPHPにおいては、HTMLタグを動的に生成する際に文字列リテラルを取り扱うことが頻繁にあるため、学びはじめの段階で理解することが重要です。

文字列リテラルにおける特別な文字

後述するシングルクオートやダブルクオートのように、文字によってはそのまま記述しても正常に取り扱えない場合があります。その場合は、バックスラッシュ「\」を利用して「\’」「\”」のように記述しましょう。このように、バックスラッシュから始まる特別な文字は「エスケープシーケンス」と呼ばれています。

エスケープシーケンスは、特殊な文字を文字列として解釈するために利用する他に、PHPによって生成されたHTMLコード内で改行やタブ入力をするときにも利用します。エスケープシーケンスによる文字列の記述例を、以下のサンプルコードに示します。

ブラウザで確認すると、①のエスケープシーケンスが正常に解釈され、記号が出力されていることが分かります。

ブラウザ確認結果

一方、②のエスケープシーケンスはブラウザ上で動作確認することはできません。②のエスケープシーケンスは、HTMLのソースコード内でその動作を確認できます。開発者ツールでソースコードを見てみると、赤枠部分のように改行とタブ入力がされていることが確認できます。

開発者ツール確認結果

文字列リテラルの表現方法

PHPで文字列リテラルを表現する方法は、以下の4種類があります。

方法 特徴
シングルクオートで囲む方法 変数を解析しない
ダブルクオートで囲む方法 変数を解析し文字列リテラルに展開する
Nowdocで表現する方法 複数行に渡って文字列リテラルを表現する
変数を解析しない
ヒアドキュメントで表現する方法 複数行に渡って文字列リテラルを表現する
変数を解析し文字列リテラルに展開する

シングルクオートで囲む方法

1つ目は、シングルクオートで囲む方法です。最もオーソドックスな文字列リテラルの表現方法で、特別な場合を除いてシングルクオートで囲まれた部分は、純粋に文字列リテラルとして解釈します。シングルクオートによる文字列リテラルの記述例を、以下のサンプルコードに示します。

ブラウザで確認すると、以下のように表示されます。一部のエスケープシーケンスや変数は解釈されず、そのまま文字列リテラルとして表示されていることが分かります。

ブラウザ確認結果

ダブルクオートで囲む方法

2つ目は、ダブルクオートで囲む方法です。ダブルクオートも頻繁に利用される文字列リテラルの表現方法ですが、以下の2点がシングルクオートで表現する場合と異なります。

  • 一部のエスケープシーケンスを解釈する。
  • 変数を解析し、文字列リテラルとして解釈する。

ダブルクオートによる文字列リテラルの記述例を、以下のサンプルコードに示します。

ブラウザで確認した結果は、以下の通りです。1行目はシングルクオートと同様、2行目はエスケープシーケンスによってダブルクオートを文字列リテラルとして表示しています。また、4行目と5行目は、変数の中身を展開して表示していることが分かります。

ブラウザ確認結果

3行目は、エスケープシーケンスが解釈されることにより、シングルクオートとは異なる表示結果となっています。開発者ツールで確認すると、赤枠部分のようにタブ入力と改行がされていることが分かります。

開発者ツール確認結果

Nowdocで表現する方法

3つ目は、Nowdoc構文です。簡単な使い方を、以下のサンプルコードに示します。

Nowdocは、シングルクオートやダブルクオートで表現するよりも可読性が高いため、長大な文字列を取り扱う際に最適です。機能としてはシングルクオートと同様で、エスケープシーケンスや変数の中身は解釈しません。

ただし、上記サンプルコードのように見やすく改行しても、ブラウザでは以下のように改行は反映されないことに注意してください。

ブラウザ確認結果

ヒアドキュメントで表現する方法

4つ目は、ヒアドキュメントです。Nowdocと同様に終端文字列を利用して文字列リテラルを表現します。Nowdocと異なる点は以下の2点です。

  • 終端文字列をシングルクオートで囲まない。
  • 機能的には、ダブルクオートと同様に動作する。

ヒアドキュメントの記述例を、以下に示します。ダブルクオートと動作は同一であるため、変数の中身を展開して文字列を表示します。

ブラウザ確認結果は、以下のようにNowdocの場合と同様です。

ブラウザ確認結果

PHPのヒアドキュメントを使うには?EOFで囲む方法を解説します 【PHP初心者向け】ヒアドキュメントを使って文章をそのまま表示する方法

文字列の操作方法

PHPでは、文字列に対してさまざまな操作を実行でき、文字列操作のための関数が用意されています。数が多いため、ここではよく利用する関数について、以下の7ジャンルに分類しながら解説します。

  • 文字列の出力
  • 文字列の長さの取得
  • 文字列の連結
  • 文字列の分割
  • 文字列の切り出し
  • 文字列の検索
  • 文字列の置換

文字列の出力

PHPにおける文字列の出力は、出力先によって方法が異なります。よく利用される方法は以下の通りです。

出力先 方法 特徴
ブラウザ
(HTMLファイルに出力してブラウザで表示する)
echoを利用する HTMLファイルに文字列を出力する。
var_dump関数を利用する HTMLファイルに変数の諸情報を出力する。
ログファイル error_log関数を利用する エラーログファイルに文字列を出力する。

上記3つの記述例を、以下のサンプルコードに示します。

なお、error_log関数を利用する際は、php.iniに以下のディレクティブを記述する必要があります。

error_logは、エラーログファイルの出力場所とファイル名を指定するためのディレクティブです。

ブラウザの表示結果とログファイルの出力結果は、以下の通りです。var_dump関数では、変数の中身とともにデータ型と文字列長が表示されていることが分かります。

ブラウザ確認結果

ログファイル確認結果

【PHP入門】echoによる文字列出力の方法と注意点を解説 【初心者向け】PHPのエラーを確認する方法!

文字列の長さの取得

文字列の長さを取得する際には、文字列の何をカウントするかによって2通りのパターンがあります。

カウント方法 方法
バイト数をカウント strlen関数を利用する
文字数をカウント mb_strlen関数を利用する

各関数の使用例を以下に示します。バイト数をカウントする際は、文字コードの種類によって結果が異なることに注意してください。

ブラウザで確認した結果は、以下の通りです。デフォルトエンコーディングであるUTF-8は、ひらがな1文字を3バイトでカウントするため、「おはよう」は12バイトになります。

ブラウザ確認結果

PHPでUTF-8以外の文字コードを扱う方法|文字コード変換の留意点も解説!

文字列の連結

文字列を連結するには、主に以下の方法があります。

連結方法 方法
文字列を直接連結 連結演算子を利用する
特定の文字をはさみながら文字列を連結 implode関数を利用する

各方法の記述例を以下に示します。

ブラウザで確認した結果は、以下の通りです。

ブラウザ確認結果

PHPで文字列を連結させる方法!カンマを使った方法も解説 【PHP】implode関数で配列要素を文字列によって連結する方法

文字列の分割

文字列を分割するには、主に以下の方法があります。

分割方法 方法
区切り文字を指定して文字列を分割 explode関数を利用する
文字数を指定して文字列を連結 str_split関数を利用する

各関数の記述例を、以下に示します。explode関数は、文字列分割時に指定した区切り文字を含めないことに注意してください。

ブラウザで確認した結果は、以下の通りです。

ブラウザ確認結果

PHPで文字列を分割するには?explode関数の基本とその使い方

文字列の切り出し

文字列の中から特定の文字列のみを切り出すには、主に以下の方法があります。

対象の文字列 方法
英数字 substr関数を利用する
日本語(マルチバイト文字) mb_substr関数を利用する

各関数の使用例は、以下のサンプルコードの通りです。いずれの関数も、切り出す文字列の先頭位置と文字数を引数として指定します。

ブラウザで確認すると、以下のように表示されます。日本語をsubstr関数で切り出そうとすると正常に動作しませんが、mb_substr関数では正常に動作していることが分かります。

ブラウザ確認結果

文字列の検索

文字列の中から特定の文字列を検索するには、主に以下の方法がります。

検索結果 方法
検索する文字列が現れる最初の位置 strpos関数を利用する
一致判定(対象文字列が存在したか否か) preg_match関数を利用する

各関数の使用例は、以下の通りです。preg_match関数の第1引数は、検索文字列を両端からスラッシュ(/)で囲んでいます。このような表現を正規表現と言い、検索文字列とさまざまな記号を組み合わせることで、より高度な文字列検索処理を実装できます。

ブラウザで確認した結果は、以下の通りです。

ブラウザ確認結果

【PHP】文字列を正規表現で検索する関数の使い方を解説

文字列の置換

文字列の中にある特定の文字列を別の文字列に置き換えるには、主に以下の方法がります。

置換方法 方法
置換前の文字列と置換後の文字列をそれぞれ指定 str_replace関数を利用する
正規表現を用いて指定 preg_replace関数を利用する

使用例は、以下の通りです。preg_match関数と同様に、preg_replace関数も正規表現を用いて置換処理を行います。

ブラウザ確認結果は、以下の通りです。

ブラウザ確認結果

PHPで文字列を置換する方法!str_replace・preg_replace・str_ireplace【初心者向け】

まとめ

いかがでしたか?

今回は、

・PHPのstring型の特徴
・文字列の操作方法とよく利用する関数

について解説しました。

文字列を取り扱う際には、シングルクオートとダブルクオートの違いを理解しつつ適切に使い分けることがポイントです。また、文字列に対する操作も多種多様で、一度にすべてを覚えることは簡単ではありません。したがって、簡単なプログラム作成を通して、地道に身に着けていくことが重要です。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?