【PHP入門】文字列を分割するexplode関数の覚え方と使い方
SNSやスマートフォンの普及により、PHP言語をベースとしたWebサイトの需要が高まっています。プログラミング言語としてのPHPの汎用性は極めて高く、さまざまなWebサイトやサービスの構築に用いられています。
- ポータルサイト
- ECサイト
- チャットシステム
- WordPressなどのCMS
また、PHPは他の言語やデータベースと連携したシステム開発に使われることが多いため、エンジニアはぜひ習得したい言語です。
本記事では、PHPの関数の中でもっとも使用頻度の高い「explode関数」の使い方について解説。配列や正規表現、改行、区切り文字など、基本的な概要を覚えておきましょう。
PHPとは
PHPとは「Hypertext Preprocessor」を再帰的に略したもので、開発において頻繁に使用されるオープンソースの汎用スクリプト言語です。
JavaScriptなどとは異なり、サーバーサイドで実行されるため、ユーザーのブラウザからはPHPの内容を見ることはできません。
そのため、は個人情報やパスワードなどの情報を扱う処理に適しており、次のような特徴を有します。
- Webプログラミング初心者にもわかりやすい
- データベースと連携しやすいため、システム構築に向いている
- サーバーサイドの言語のため、秘密を保持したデータのやり取りが可能
Webプログラミング初心者にもわかりやすい
HTMLやCSSと比較すると難易度は多少高まりますが、HTMLの形を残したままのプログラミングも可能であるため、プログラミング初心者にも挑戦しやすい言語です。
データベースと連携しやすいため、システム構築に向いている
MySQLなどデータベースを操作する命令文や、配列に関する命令も多いため、大規模サイトを含むデータベースを活用したWebサービスの構築に適しています。
具体的には、顧客管理や商品管理を必要とするECサイトや、WordPressなど記事をデータベースで管理するブログCMSシステムなどが該当します。
サーバーサイドの言語のため、秘密を保持したデータのやり取りが可能
JavaScriptのようなフロントエンド言語とは異なり、ブラウザからソースコードを表示してもPHPでプログラムした部分はユーザーには見えません。
そのため、IDとパスワードを入力させたり、マイページを作成したりといった個人情報を取り扱うWebサイト・サービスの構築に適しています。
PHPの基礎
PHPのプログラムは、HTMLの中に開始命令の「<?php」と終了命令の「?>」で囲んで記述します。
また、ファイルの拡張子は「.php」です。
PHPの記述は必須ではなく、HTMLファイルの拡張子を「.html」から「.php」に代えてサーバーにアップロードすれば、PHPファイルとして扱われ、ブラウザでHTMLファイルと同様に表示されます。
PHP開発のための環境設定
PHPはサーバーサイドのスクリプト言語です。つまり、PHPに対応したサーバーを使う必要があります。
たとえばHTMLファイルであれば、自分のPC上からブラウザで確認できますが、PHPファイルの場合はサーバーにアップロードしてから、サーバーのURLにアクセスして確認しなくてはいけません。
しかし、都度サーバーにアップして確認することは、非常に作業効率が悪い状態です。
自分のPC上でPHPを動かすためには、PHP環境を自分のPCに構築するための「XAMPP」と呼ばれるフリーウェアをインストールする必要があります。なお、XAMPPは公式サイトからインストーラーをダウンロードすることで、簡単にインストール可能です。
変数と配列
変数はデータを保存しておく箱にたとえられます。
変数の中に文字列や数値、数式などを入れてその後の処理の中で使用するものです。
PHPの変数は先頭に「$」を付けて定義し、イコール「=」で値をセットします。
以下のサンプルコードは、「$sport」という変数に「baseball」という値をセットし、「echo」の命令で「$sport」という変数の値を画面に表示します。
<?php $sport= “baseball”; echo $sport; ?> |
ひとつの変数にはひとつの値しか入れられません。
複数の値をひとつの変数で扱いたい場合は、配列を使用します。
箱にたとえると、番号のついた変数の箱の集まりを「配列」と考えればよいでしょう。
変数に配列をセットするには、array関数を使用して以下のような形で記述します。
array( 値1, 値2, 値3,… )
サンプルコードは以下のとおりです。
変数「$sport」に、「baseball」「football」「golf」という3つの値を持つ配列をセットします。
「echo」は、画面に値を表示する命令です。
<?php $sport = array(“baseball”, “football”,” golf”); echo $sport[0]; ?> |
このコードを実行すると、画面には以下のように表示されます。
「echo $sport[0];」の部分を「echo $sport[1];」のように書き換えて実行してみると、$変数名[0]には「baseball」、$変数名[1]には「football」というように、値がセットされていることがわかります。
またarray関数を使わず、変数の中に値をひとつずつ直接指定したものを並べるという方法でも、配列を作成することができます。
サンプルコードは以下のとおりです。
<?php $sport[0] = “baseball”; $sport[1] = “football”; $sport[2] = ”golf”; echo $sport[0]; ?> |
このコードを実行すると、以下のように表示されます。
連想配列
配列の概念を踏まえて「連想配列」を解説しましょう。
連想配列では、配列で振られていた番号の部分が文字列になります。
箱にたとえると、それぞれ別の名前のついた変数の箱の集まりが連想配列です。
普通の配列と同じように使用でき、連想配列と普通の配列を混ぜることも可能です。
それでは、具体例を説明していきましょう。
まずは、普通の配列を作るサンプルコード。
<?php $name = array(“太郎”, “一郎”, “花子”); echo $name[0]; ?> |
このコードを実行すると、以下のように表示されます。
この場合、$name[0] と指定されているので、1番目の要素だけが表示されます。
この[0]にあたる部分は「配列の添え字」といい、phpでは0から始まる数で要素に付与されます。
ではこの配列を、連想配列にしてみましょう。
数値の変わりに、文字列を設定します。
またarray関数は、以下のような書き方も可能です。
array( キー1=>値1, キー2=>値2,…)
<?php $name = array(“営業” => “太郎”, “プログラマー” => “一郎”, “デザイナー” => “花子”); echo $name[“営業”]; ?> |
この場合、配列$nameの「営業」という名前を付けたデータだけが表示されます。
配列$nameの、「プログラマー」という名前を付けたデータは「一郎」、「デザイナー」という名前を付けたデータは「花子」となっているので、実行して確認してみましょう。
関数
関数とはあるまとまった処理を行い、実行結果を返すものです。
決まった処理をプログラムの別の場所で、何度も使用する場合に役立ちます。
たとえば「メールを送る関数」「大文字を小文字に変換する関数」などを作っておくと、その後のプログラミング時に関数を呼び出すことで、同じプログラムを書く手間が省けます。
関数には、PHPにあらかじめ定義されている「組み込み関数」と、ユーザーが自分で作成する「ユーザー定義関数」の2つがあります。
引数とは
関数に渡すパラメータを「引数」と呼びます。
たとえば、足し算をする関数がある場合、足す数を関数へ渡す必要があります。
この時に、関数に渡す「足す数」が引数です。
戻り値とは
関数が実行した結果を「戻り値」と呼びます。
関数は、戻り値を取得するために作成される式です。
たとえば、足し算をする関数がある場合、引数をすべて足した値を「戻り値」に設定します。
戻り値のない関数
戻り値のない関数もあります。
「引数で受け取った値を表示する」や「メールを送信する」など、実行が目的の場合が戻り値のない関数です。
この場合プログラムでは、成功か失敗かを戻り値として設定して、エラーチェックに使用するのが一般的です。
explode関数とは「文字列を区切り文字で分割」
explode関数は組み込み関数のひとつで、文字列データから配列を作る時などに用いられます。
基本的な覚え方は、「文字列(string)を、指定した区切り文字(delimiter)で分割」です。
explode関数の引数は、以下のようになっています。
explode(第1引数[delimiter],第2引数[string],第3引数[limit])
引数 | パラメータ |
第1引数[delimiter] | 区切り文字(例としてスペースやカンマなど) |
第2引数[string] | 文字列データ |
第3引数[limit] | この引数は任意で設定します。 返される配列の最大要素数になります。 |
explode関数の使い方
explode関数の具体的な使い方について、以下のロジック、ポイントを解説します。
- テキストを配列に変換する
- CSVデータを配列に変換する
- explode関数を使う時の注意点
テキストを配列に変換する
explode関数は、戻り値を配列にして返すため、テキストを配列に変換したい時にも役立ちます。
たとえば 「青森、山形、秋田、岩手」という読点「、」で区切られた都道府県の文字列を例に説明していきましょう。
この状態でプログラムに使うと、非常に効率が悪くなってしまうため、explode関数を使って配列に変換します。
サンプルコードは以下のとおりです。
<?php $str = “青森,山形,秋田,岩手”; $ value = explode(“,”, $str); echo ‘<p>’,$value[0],’</p>’; echo ‘<p>’,$value[1],’</p>’; echo ‘<p>’,$value[2],’</p>’; echo ‘<p>’,$value[3],’</p>’; ?> |
これを実行すると、画面には以下のように表示されます。
CSVデータを配列に変換する
テキストを配列に変換する方法の応用として、CSVデータを配列に変換する例を解説します。
CSVとは「Comma Separated Value」の略で、Comma(カンマ)で Separated(区切った)Value(値)という形式です。Excelなどの表計算ソフトで、表やデータベースをテキストファイルに書き出すときによく使用され、拡張子は「.csv」のファイルになります。
例としてこのようなCSVデータがある場合の、配列に格納するサンプルコードについて解説していきます。
改行の取り扱い
改行を取り扱う際、では「 」という改行コードを使用します。これは、プログラム上で操作対象として扱うための表記です。
サンプルコードは以下のとおりです。
<?php $input = “メロン,スイカ,バナナ 人参,じゃがいも,キャベツ 白玉,あずき,もも”; $arrayLine = explode (“ ”, $input); $output = []; for($i = 0; $i < count($arrayLine); $i++) { $output[] = explode(“,”, $arrayLine[$i]); } print_r($output); ?> |
この場合、2行目で改行コード「 」で分割して配列$arrayLineに値をセットします。
6行目で「,」で分割して、配列$outputに値を入れています。
配列$arrayLineの要素のひとつが、配列$outputで形成されている状態です。
実行結果は、以下のようになります。
Array ( [0] => Array ( [0] => メロン [1] => スイカ [2] => バナナ ) [1] => Array ( [0] => 人参 [1] => じゃがいも [2] => キャベツ ) [2] => Array ( [0] => 白玉 [1] => あずき [2] => もも ) ) |
explodeとsplitの違いは「正規表現ベースか否か」
explode関数を使う上で注意点があります。
まずは、以下のサンプルコードをご覧ください。
果物の名前を並べた文字列から$fruits_arrayという配列を作成し、要素の数を表示するプログラムです。
<?php $str = ‘りんご,バナナ,いちご,メロン,みかん’; $fruits_array = explode(‘,’, $str); print ‘フルーツは’ . count($fruits_array). ‘種類です。<br>’; echo ‘<pre>’; print_r($fruits_array); echo ‘</pre>’; ?> |
実行結果は以下のようになります。
ここで、$str変数に空文字列が入る(※変数の中に入れるものがない状態のこと)と、どうなるのでしょうか。
<?php $str = ”; $fruits_array = explode(‘,’, $str); print ‘フルーツは’ . count($fruits_array). ‘種類です。<br>’; echo ‘<pre>’; print_r($fruits_array); echo ‘</pre>’; ?> |
予想では、要素数が0の空の配列が返されるところですが、結果は以下のようになります。
空の要素がひとつ入った配列が返され、フルーツは0種類ではなく1種類となってしまいました。
プログラムの中で関数を使う場合、予想外の結果が返されると重大なバグを生み出してしまう可能性があります。
explode関数の場合は、第2引数に空文字列が入らないように、関数に渡す前にエラーチェックを入れて対策を行うことが大切です。
「explode」と「split」の違い
「explode」とよく似た関数に「split」があります。
splitとexplodeは、文字列を分割して配列で返すという意味では、同じ動作をする関数です。
split (第1引数[delimiter],第2引数[string],第3引数[limit])
explode(第1引数[delimiter],第2引数[string],第3引数[limit])
引数 | パラメータ |
第1引数[delimiter] | 区切り文字(例としてスペースやカンマなど) |
第2引数[string] | 文字列データ |
第3引数[limit] | この引数は任意で設定します。 返される配列の最大要素数になります。 |
この、引数も記述方法も同じ2つの関数の違いは、区切り文字に正規表現を使えるかどうかです。
正規表現を使う場合は「split関数」を、正規表現を使う必要がない場合は「explode関数」を使用します。
しかし、split関数はPHP 5.3.0で非推奨となり、PHP7では削除されているため、文字列の分割の際はexplode関数が適しています。
また、正規表現を使う場合には、preg_split関数が新たに推奨されています。
preg_split関数
正規表現を使う場合や複数の区切り文字で文字列を分割したいときは、preg_split関数を使用します。
array preg_split (第1引数[pattern],第2引数[subject],第3引数[limit] ,第4引数[flags])
引数 | パラメータ | ||
第1引数[delimiter] | 区切り文字(例としてスペースやカンマなど) | ||
第2引数[string] | 文字列データ | ||
第3引数[limit] | この引数は任意で設定します。 返される配列の最大要素数になります。 |
||
第4引数[flags] | |||
PREG_SPLIT_NO_EMPTY | このフラグを設定すると、空文字列以外の値が返されます。 | ||
PREG_SPLIT_DELIM_CAPTURE | このフラグを設定すると、文字列分割用のパターン中の カッコによるサブパターンでキャプチャされた値も同時に返されます。 | ||
PREG_SPLIT_OFFSET_CAPTURE | このフラグを設定すると、値は配列で返されます。 |
それでは、2つ以上の区切り文字で文字列を分割するサンプルコードを使って、説明していきましょう。
以下の例では、カンマと半角スペースを区切り文字に指定して、文字列を分割しています。
<?php // カンマまたは ” “, , , , \f などの空白文字で句を分割する。 $keywords = preg_split(“/[\s,]+/”, “hypertext language, programming”); print_r($keywords); ?> |
「\s」は半角スペースを表します。
プログラム上で操作対象として扱うための表記です。
「/[」はエスケープシーケンスといい、通常の文字列では表せない特殊な文字や機能を表現するための規定された特別な文字列の並びのことです。
「print_r」は、指定した変数に関する情報を表示させるPHPの命令文です。
実行すると、以下のように表示されます。
次の例は、文字列を分解して一文字ずつ配列にセットするサンプルコードです。
<?php $str = ‘string’; $chars = preg_split(‘//’, $str, -1, PREG_SPLIT_NO_EMPTY); print_r($chars); ?> |
実行結果は、以下のようになります。
explode関数はプログラミングに役立つ知識のひとつ
開発の現場でのプログラミングは、配列を使って大量のデータ処理を行うことが非常に多くなります。
explode関数は、テキストファイルやデータベースのデータから配列を作成する時などに役立つPHPの基本といえる関数です。
PHPエンジニアを目指すなら、配列の操作は必ず覚えておきましょう。
この記事では、初心者にわかりやすいように省略して説明している部分がありますので、もっと詳しい情報が知りたい方は、公式サイトのPHP関数リファレンスで確認して下さい。
- PHPエンジニアは多くの案件で高い需要を持つ
- explode関数は配列を作成するのに役立つ関数
- explode関数は文字列を指定した区切り文字で分割することができる
- PHPで文字列の分割の際はsplit関数ではなくexplode関数を使用する