文字列を扱う際に、1つの文字列をいくつかの値に分けたり、文字列の中から一部の文字のみを抜粋したい場合があると思います。
そんな時に活用できる関数のうちの1つが、explode関数です。
今回は、explode関数の使い方について詳しく解説していきたいと思います。
PHPのexplode関数とは?
explode関数は、特定の文字列を分割したい場合に使用する関数です。
引数に指定した区切り文字を基準に、対象の文字列を複数の要素に分けることができます。
例えば、「2020/12/01」 といったような日付表示を、 生年月日でそれぞれ分割するとします。
この場合、explode関数でスラッシュを区切り文字とすることで、以下の三つの文字列に分割することができます。
- 2020
- 12
- 01
分割された文字列は、それぞれ別個の値として使用可能なため、文字列の一部を抜粋して利用したい場合などに活用されています。
explode関数の使い方
さっそく、explode関数の詳しい使い方について見ていきましょう。
基本構文
まずは、基本構文について解説していきます。
explode関数を使用する際は、以下の形式でコードを記述します。
【基本構文】
explode( 区切り文字, 対象文字列, 最大要素数 )
第1引数には、文字列を分割する際の基準となる区切り文字を指定します。
指定した文字は、分割後の文字列には含まれません。
第2引数には、対象の文字列を指定します。
ここで指定した文字列が、第1引数に指定した区切り文字を基準に分割されます。
第3引数には、配列に格納する要素の最大数を任意で指定することができます。
区切り文字によって分割する文字列の総数が、引数に指定した数値を超える場合、最大数に到達した時点で分割が終了し、それ以降の区切り文字はスルーされます。
戻り値は配列です。
分割後のそれぞれの文字列が、配列の要素として格納されます。
explode関数の基本的な使い方
以下のサンプルコードを元に、explode関数の実際の動きを確認してみましょう。
冒頭に例として挙げた、日付を生年月日ごとに分割するケースを実行してみます。
【サンプルコード】
<?php
$sampleDay = "2020/12/01";
// 文字列を分割
$dayList = explode ("/", $sampleDay);
print_r($dayList);
?>
【実行結果】
Array
(
[0] => 2020
[1] => 12
[2] => 01
)
生年月日の間にそれぞれ挟まるスラッシュを区切り文字とし、文字列を3つの要素に分割しました。
上記のように、戻り値を変数に格納することで、各要素にアクセスすることが可能です。
デフォルトではこのように、区切り文字が存在する箇所すべてで分割が行われますが、第3引数に指定した数値によっては動作が異なる場合があります。
以下の例を見てみましょう。
【サンプルコード】
<?php
$sampleDay = "2020/12/01";
// 最大要素数を2で分割
$dayList = explode ("/", $sampleDay, 2);
print_r($dayList);
?>
【実行結果】
Array
(
[0] => 2020
[1] => 12/01
)
対象の文字列や区切り文字の指定は先ほどと同じですが、最大要素数を2に指定したことにより、分割後の結果が異なっています。
上記のサンプルの場合、すべての箇所で分割すると要素数が3つとなり、指定した最大数を超えてしまうため、1つめのスラッシュの部分でのみ分割が行われ、それ以降は文字列が分割されないまま配列に格納されています。
また、実行結果を見ると分かるように、分割が行われた箇所の区切り文字は戻り値に含まれませんが、スルーされた場合は文字列に残されたままとなります。
explode関数の応用的な使い方
基本的な使用方法について確認ができたところで、ここからはより応用的なケースについて紹介していきたいと思います。
改行が入った文字列を分割する
文字列を扱う際に、例えばテキストファイルから文章を読み込んだ時など、改行コードが混じるケースが中には存在します。
改行コードの混じった文字列をそのまま扱わず、行ごとに分けて使用したい場合も、explode関数を活用することができます。
以下のサンプルコードを見てみましょう。
【サンプルコード】
<?php
$sampleText = 'あいうえお
かきくけこ
さしすせそ';
//改行コードのパターンを統一
$sampleText = str_replace(["\r\n", "\r", "\n"], "\n", $sampleText);
//改行コードで文字列を分割
$result = explode("\n", $sampleText);
print_r($result);
?>
【実行結果】
Array
(
[0] => Array
(
[0] => Taro
[1] => Yamada
[2] => 15
)
[1] => Array
(
[0] => Jiro
[1] => Tanaka
[2] => 17
)
[2] => Array
(
[0] => Hanako
[1] => Sato
[2] => 18
)
)
全体の流れとしては、まず初めにCSVデータを改行コードで分割し、その後にカンマで区切ることで、データを個々の要素に分けています。
改行コードで分割した段階で、行ごとに分かれた状態のデータが配列に格納されるため、そのデータをさらにカンマで区切る処理を、要素の数だけループ処理で繰り返します。
最終的に、各行のデータをさらに個々に分けた多次元配列を取得することができます。
CSVのデータを分割する
改行コードの処理方法を応用して、CSVデータを配列に変換することもできます。
以下のサンプルコードで、実際の動きを見てみましょう。
【サンプルコード】
<?php
$sampleData = "Taro,Yamada,15\nJiro,Tanaka,17\nHanako,Sato,18";
// 改行コードで分割
$byLine = explode ("\n", $sampleData);
$resultArray = [];
// 行ごとのデータを繰り返し取得
for($index = 0; $index < count($byLine); $index++)
{
// カンマ(,)で分割
$resultArray[] = explode(",", $byLine[$index]);
}
print_r($resultArray);
?>
【実行結果】
Array
(
[0] => Array
(
[0] => Taro
[1] => Yamada
[2] => 15
)
[1] => Array
(
[0] => Jiro
[1] => Tanaka
[2] => 17
)
[2] => Array
(
[0] => Hanako
[1] => Sato
[2] => 18
)
)
全体の流れとしては、まず初めにCSVデータを改行コードで分割し、その後にカンマで区切ることで、データを個々の要素に分けています。
改行コードで分割した段階で、行ごとに分かれた状態のデータが配列に格納されるため、そのデータをさらにカンマで区切る処理を、要素の数だけループ処理で繰り返します。
最終的に、各行のデータをさらに個々に分けた多次元配列を取得することができます。
explode関数を使う際の注意点
文字列を分割するのに便利な explode関数ですが、使用の際には、いくつか気を付けるべきポイントが存在します。
separatorに空文字列を入れた場合の動作
explode関数では、区切り文字に空文字を指定することはできません。
PHP 8.0 より前のバージョンでは、空文字を指定すると Warningが発生し、falseが返されます。PHP 8.0 以降の場合は、ValueErrorがスローされます。
【サンプルコード】
<?php
$fruitsStr = 'apple,orange,banana';
$result = explode('', $fruitsStr);
print_r($result); // PHP 8.0 以前の場合は false
?>
【実行結果】
PHP Fatal error: Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /tmp/main.php:5
区切り文字に空文字が指定されていないことを確認するか、もしくはエラーハンドリングを行うなどして対策しておくようにすると、安全に運用することができます。
指定した区切り文字が対象の文字列に存在しない場合
指定した区切り文字が対象の文字列内に存在しない場合は、元の状態の文字列がそのまま配列の要素として格納され、戻り値で返されます。
【サンプルコード】
<?php
$fruitsStr = 'apple,orange,banana';
$result = explode('&', $fruitsStr);
print_r($result);
?>
【実行結果】
Array
(
[0] => apple,orange,banana
)
動作上はエラーが発生することはないため、分割後の処理内容によっては、思わぬ動作を引き起こす原因になる場合もあります。
必要に応じて、区切り文字の有無を確認するなどの対策をすると良いでしょう。
正規表現を使用して文字列を区切りたい場合
プログラミングで文字列の操作を行う際によく活用されるのが、正規表現です。
文字列の書式パターンを指定することにより、複雑な条件に対応できるメリットがある正規表現ですが、残念ながら explode関数では使用することができません。
区切り文字の指定に正規表現を活用したい場合は、preg_split関数を使用します。
【サンプルコード】
<?php
$fruitsStr = 'apple,orange,banana';
// explode関数の場合
$resultExplode = explode("/a[a-z]g/", $fruitsStr);
print_r($resultExplode);
// preg_split関数の場合
$resultPreg = preg_split("/a[a-z]g/", $fruitsStr);
print_r($resultPreg);
?>
【実行結果】
Array
(
[0] => apple,orange,banana
)
Array
(
[0] => apple,or
[1] => e,banana
)
それぞれの関数で結果が異なっているのが分かりますね。
カンマで区切るなどといった簡単な条件の場合は explode関数を、より複雑な文字列のパターンに対応したい場合は preg_split関数を使用するといいでしょう。
まとめ
今回は、explode関数の使い方について解説しました。
データ操作の際などに利用できる関数ですので、ぜひ使い方を覚えて活用してみてくださいね。
PHPの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、PHPに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。