文字列

PHP explodeとimplodeの使い方について解説〜複数区切り文字、改行、正規表現、区切り文字がない・空文字の処理方法を紹介

PHPのexplode関数は、文字列を指定した区切り文字で分割するための便利な関数です。

本記事では、複数の区切り文字や改行、正規表現を用いる方法、区切り文字が見つからない場合や空文字の場合の挙動について解説します。

また、分割の逆操作を行うimplode関数の使い方も具体例を交えて紹介します。

基本的な使い方

explode関数の概要と書式

PHPのexplode関数は、指定した区切り文字で文字列を分割し、配列として返す関数です。

使い方はシンプルで、下記のような書式となります。

// 書式
$array = explode($delimiter, $string, $limit);

パラメータの説明

  • $delimiter

分割に使用する区切り文字です。

これは必ず文字列で指定し、単一の文字列または文字列を使用します。

  • $string

分割対象となる元の文字列です。

処理対象の文字列全体がここに入ります。

  • $limit(オプション)

配列の要素数を制限することができます。

省略すれば文字列全体を分割します。

  • 正の値を指定すると、返り値の配列要素数が$limitに制限され、最後の要素には残りの文字列全体が入ります。
  • 負の値を指定すると、最後の|$limit|個の要素が除外されます。

返り値の動作確認

explode関数は、指定した区切り文字が存在する場合、各区切り毎に分割された文字列からなる配列を返します。

もし区切り文字が存在しない場合には、元の文字列全体を含む配列(要素数1の配列)として返されます。

また、$limitを利用する場合は、配列の最後の要素に残りの文字列が格納されることを確認してください。

基本的な利用例

下記は、カンマで区切られた文字列を分割する基本的な例です。

<?php
// カンマで区切られた文字列
$inputString = "りんご,みかん,バナナ";
// explode関数で分割
$fruits = explode(",", $inputString);
// 配列の中身を出力
print_r($fruits);
?>
Array
(
    [0] => りんご
    [1] => みかん
    [2] => バナナ
)

複数の区切り文字への対応

explodeの制限事項

explode関数は単一の区切り文字しか指定できないため、複数の区切り文字を同時に処理することはできません。

例えば、カンマとセミコロンの両方を区切り文字として利用したい場合、直接は対応できません。

そのため、複数の区切り文字を利用する場合は、他の方法を考える必要があります。

複数区切り文字を扱う方法

複数の区切り文字を扱う方法として、まず全ての区切り文字を一つの統一した文字に置き換えてからexplodeを使用する方法があります。

以下はそのサンプルコードです。

<?php
// サンプル文字列(カンマとセミコロンで区切られている)
$inputString = "りんご,みかん;バナナ,ぶどう;もも";
// 複数の区切り文字を統一するため、どちらもカンマに置換
$normalizedString = str_replace(array(";", "|"), ",", $inputString);
// explodeで分割
$fruits = explode(",", $normalizedString);
// 配列の中身を出力
print_r($fruits);
?>
Array
(
    [0] => りんご
    [1] => みかん
    [2] => バナナ
    [3] => ぶどう
    [4] => もも
)

改行を区切り文字として扱う方法

改行文字(nr)の扱い

改行を区切り文字として利用する場合、主に\n(LF)や\r\n(CRLF)が使われます。

プラットフォームにより改行コードが異なるため、対象の文字列内にどちらの改行文字が使われているか確認が必要です。

多くの場合、\nで分割することで十分ですが、Windows環境の場合は\r\nを考慮するように注意してください。

サンプルコードによる実践例

以下のサンプルコードは、改行を基準に文字列を分割する方法を示しています。

<?php
// 複数行の文字列(WindowsとUnixの両方の改行が混在している例)
$inputString = "1行目\r\n2行目\n3行目";
// CRLFとLFを統一するため、CRLFをLFに置換
$normalizedString = str_replace("\r\n", "\n", $inputString);
// 改行で分割
$lines = explode("\n", $normalizedString);
// 分割後の各行を出力
print_r($lines);
?>
Array
(
    [0] => 1行目
    [1] => 2行目
    [2] => 3行目
)

正規表現を利用した文字列分割との比較

explodeとpreg_splitの違い

explode関数は単一の固定文字で分割するため、シンプルで高速に動作しますが、柔軟性は低いです。

一方、preg_split関数は正規表現を利用するため、複雑なパターンに基づいて文字列を分割できます。

以下のポイントで違いが見られます。

  • パフォーマンス面では、単純な分割の場合はexplodeのほうが高速です。
  • 複数の区切り文字やパターンがある場合は、preg_splitの利用が推奨されます。
  • 正規表現により、多様な分割条件を一度に設定できるため、コードがシンプルになる場合もあります。

正規表現を用いた場合の処理例

以下のサンプルコードは、カンマまたはセミコロン、空白を区切り文字として利用する例です。

<?php
// サンプル文字列:カンマ、セミコロン、空白で区切られた果物のリスト
$inputString = "りんご, みかん; バナナ, ぶどう; もも";
// 正規表現で、カンマ、セミコロン、または空白を区切り文字として分割
$fruits = preg_split("/[,;\\s]+/", $inputString);
// 結果を出力
print_r($fruits);
?>
Array
(
    [0] => りんご
    [1] => みかん
    [2] => バナナ
    [3] => ぶどう
    [4] => もも
)

区切り文字が存在しない場合の挙動

処理結果の確認ポイント

区切り文字が元の文字列に存在しない場合、explode関数は元の文字列全体を唯一の要素とする配列を返します。

そのため、返り値の配列の要素数を確認することで、区切り文字が存在しなかったことを判断できます。

注意が必要なケース

  • 入力文字列が空の場合も同様に、explodeは空の文字列を配列内に含む形で返します。
  • 予期せぬ入力があった際、例えば区切り文字が誤って指定される場合、想定外の動作となる可能性があるため、分割前の入力チェックや配列要素数の確認が大切です。

空文字を区切り文字に指定した場合

PHPの仕様に沿った動作

PHPでは、空文字("")を区切り文字として指定すると、警告が発生します。

これは、区切り文字が未指定や無効な状態として扱われるためです。

そのため、空文字が誤って指定されないように注意する必要があります。

エラーメッセージと対策

空文字を区切り文字として利用しようとすると、エラーメッセージが表示され、期待した動作は得られません。

以下は、誤ったケースのサンプルコードと対策例です。

<?php
// 誤った例:空文字を区切り文字として指定
$inputString = "エラーが発生する例";
$delimiter = ""; // 空文字は使用できない
// この行で警告が発生します
$result = explode($delimiter, $inputString);
// 結果を出力
print_r($result);
?>
Warning: explode(): Empty delimiter in /path/to/script.php on line XX

対策としては、空文字でないことを事前にチェックするか、デフォルトの区切り文字を設定するように実装しましょう。

implode関数による文字列結合

基本的な使い方と書式

implode関数は、配列の各要素を連結して一つの文字列に変換する関数です。

使用する際は、各要素の間に挿入する文字列(グルー)と配列を指定します。

書式は以下の通りです。

// 書式
$string = implode($glue, $array);
  • $glue

各配列要素を結合する際に挟む文字列です。

カンマやスペースなど、用途に応じた文字列を使用します。

  • $array

結合対象の配列です。

explodeとの連携活用例

explodeで分割した文字列を、ある基準で改めて連結したい場合にimplode関数を利用できます。

以下は、カンマで分割した後、区切り文字を変更して再結合する例です。

<?php
// 元の文字列
$inputString = "りんご,みかん,バナナ";
// explodeで分割
$fruitsArray = explode(",", $inputString);
// 新たな区切り文字(ハイフン)を用いて結合
$newString = implode(" - ", $fruitsArray);
// 結果を出力
echo $newString;
?>
りんご - みかん - バナナ

まとめ

この記事では、PHPのexplodeとimplode関数の基本的な使い方と応用例、複数の区切り文字や改行、正規表現による分割、ならびに区切り文字が存在しない場合や空文字指定時の挙動について解説しましたでした。

全体を通して、各ケースでの関数の動作や注意点が整理され、実務に活かせる具体的なテクニックが得られました。

ぜひ紹介したサンプルコードを試し、ご自身のコードに組み込んで文字列処理の幅を広げてみてください。

関連記事

Back to top button