PHPで文字列を特定の区切り文字で分割したい場面は、開発中に頻繁に出てきます。

例えば、CSVデータをカンマで分割したり、日付の「2025-06-01」を「-」で年・月・日に分けたりといった処理です。
こうした文字列の分割処理で使うのがexplode()関数ですが、古いコードではsplit()関数が使われているケースもあり、注意が必要です。

この記事では、PHPのexplode()関数の使い方を基本から丁寧に解説するとともに、旧関数split()との違いや移行時の注意点についても紹介していきます。

split()関数は廃止されている

まず最も重要なポイントとして、split()関数はPHP 5.3.0で非推奨となり、PHP 7.0.0で完全に削除されています。

古いPHPバージョンで動いていたコードをそのまま新しい環境に移行すると、以下のようなエラーが発生します。

PHP Fatal error: Uncaught Error: Call to undefined function split()

PHP 5.3系の環境では、非推奨の警告として以下のメッセージが表示されていました。

PHP Deprecated: Function split() is deprecated

php.iniのエラーレベルを変更してエラーを非表示にする方法もありますが、根本的な解決にはなりません。
split()関数はPHP 7以降では使用できないため、explode()またはpreg_split()に書き換えるのが正しい対処法です。

explode()関数の基本的な使い方

split()の代わりに使うべき関数が、explode()関数です。
指定した区切り文字で文字列を分割し、配列として返してくれます。

基本的な使い方は、このようになります。

<?php
$date = "2025-06-01";
$parts = explode("-", $date);
print_r($parts);
?>

出力結果はこちらです。

Array
(
[0] => 2025
[1] => 06
[2] => 01
)

explode()関数はPHPの組み込み関数なので、特別なライブラリを追加する必要もなく、手軽に利用できます。

詳細は公式マニュアル(PHP: explode – Manual)も確認すると安心です。

explode()の詳しい使い方

こちらのセクションでは、explode()関数の詳しい使い方を説明していきます。

まず、使用できる引数はこちらです。

第1引数:区切り文字(デリミタ)
第2引数:分割したい文字列
第3引数:分割数の上限(省略可)

それでは、実際にコードを書きながら説明します。

カンマ区切りの文字列を分割する

CSVデータのようなカンマ区切りの文字列を配列に変換する場合です。

<?php
$csv = "りんご,バナナ,みかん,ぶどう";
$fruits = explode(",", $csv);
print_r($fruits);
// 出力:Array ( [0] => りんご [1] => バナナ [2] => みかん [3] => ぶどう )
?>

分割数を制限する(第3引数)

第3引数に数値を指定すると、分割する最大数を制限できます。

<?php
$text = "PHP-JavaScript-Python-Ruby";
$parts = explode("-", $text, 3);
print_r($parts);
// 出力:Array ( [0] => PHP [1] => JavaScript [2] => Python-Ruby )
?>

第3引数に3を指定したため、3つ目の要素には残りの文字列がそのまま格納されます。
先頭の一部だけを取り出したい場合に便利です。

空文字で分割した場合

区切り文字に空文字("")を指定すると、explode()falseを返し、警告が発生します。

<?php
$result = explode("", "テスト");
// Warning: explode(): Empty delimiter
?>

区切り文字には必ず1文字以上の文字列を指定しましょう。

参考:PHP 公式マニュアル – explode

explode()のよくある実装例

実際によくある場面を想定し、いくつかの実装例を紹介します。

URLのパスを分割する

<?php
$url = "https://example.com/blog/php/explode";
$path = parse_url($url, PHP_URL_PATH);
$segments = explode("/", trim($path, "/"));
print_r($segments);
// 出力:Array ( [0] => blog [1] => php [2] => explode )
?>

名前をスペースで姓と名に分ける

<?php
$name = "山田 太郎";
list($lastName, $firstName) = explode(" ", $name);
echo "姓:" . $lastName; // 出力:姓:山田
echo "名:" . $firstName; // 出力:名:太郎
?>

implode()と組み合わせて文字列を加工する

explode()で分割した配列を加工し、implode()で再び結合するパターンもよく使われます。

<?php
$tags = "PHP, JavaScript, Python";
$tagArray = explode(", ", $tags);
// 配列を加工(例:小文字に変換)
$tagArray = array_map('strtolower', $tagArray);
echo implode(" | ", $tagArray);
// 出力:php | javascript | python
?>

split()からexplode()への移行方法

古いコードでsplit()を使っている場合の移行方法を整理しておきます。

split()とexplode()の違い

split()(廃止済み)explode()
区切り文字正規表現で指定固定文字列で指定
処理速度遅い(正規表現を解析するため)速い
対応状況PHP 7.0で削除済み現行バージョンで利用可能

単純な区切り文字の場合 → explode()に置き換え

正規表現を使わず、固定の区切り文字だけで分割していた場合は、そのままexplode()に置き換えるだけでOKです。

<?php
// 変更前(split)
// $parts = split("-", "2025-06-01");

// 変更後(explode)
$parts = explode("-", "2025-06-01");
?>

正規表現を使っていた場合 → preg_split()に置き換え

split()で正規表現を使っていた場合は、explode()では対応できません。
代わりにpreg_split()関数を使いましょう。

<?php
// 変更前(split)
// $parts = split("[,;]", "りんご,バナナ;みかん");

// 変更後(preg_split)
$parts = preg_split("/[,;]/", "りんご,バナナ;みかん");
print_r($parts);
// 出力:Array ( [0] => りんご [1] => バナナ [2] => みかん )
?>

preg_split()は正規表現パターンをデリミタ(/など)で囲む必要があります。
split()から移行する際は、パターンの前後に/を追加するのを忘れないようにしましょう。

参考:PHP 公式マニュアル – preg_split

まとめ

今回は、PHPのexplode()関数の使い方と、旧関数split()からの移行方法を紹介しました。

  • split()関数はPHP 7.0で完全に削除されているため、使用は不可
  • 固定の区切り文字で分割するならexplode()関数を使う
  • 正規表現で分割が必要な場合はpreg_split()関数を使う
  • explode()は正規表現を解析しない分、split()よりも処理速度が速い

古いPHPコードを保守・移行する際は、split()が使われていないか必ず確認し、explode()またはpreg_split()に書き換えましょう。

本記事で紹介した公式ドキュメント