CSVファイルもURLもテキストデータも!「explode」関数でスマートに文字列処理


基本的な構文

explode(separator, string, limit);

引数

  • limit (オプション): 返却する配列の最大要素数を指定します。省略した場合、すべての要素が返却されます。
  • string: 分割対象となる文字列を指定します。
  • separator: 文字列を分割する区切り文字を指定します。省略した場合、カンマ (,) が区切り文字として使用されます。

戻り値

  • 分割された文字列の要素を要素とした配列を返します。区切り文字は返却値に含まれません。

具体的な動作例

$str = "りんご,ぶどう,みかん";
$fruits = explode(",", $str);

var_dump($fruits);

この例では、"," (カンマ) を区切り文字として $str 文字列を分割し、それぞれの果物を要素とした配列 $fruits に格納しています。実行結果は以下のようになります。

array(3) =>
  0 => string(3) "りんご"
  1 => string(3) "ぶどう"
  2 => string(3) "みかん"

応用例

  • テキストデータの処理: 文章をスペースや改行文字で分割し、単語や文の単位で処理することができます。
  • URLの分解: URLをスラッシュ (/) で分割し、ホスト名、パス、クエリ文字列などを取得することができます。
  • CSVファイルの解析: CSVファイルの各行をカンマ区切りで分割し、配列として処理することができます。
  • limit 引数で指定する値が負の場合、空の配列が返却されます。
  • 空の文字列 ("") を区切り文字として使用することはできません。
  • 区切り文字が文字列内に複数回出現する場合、すべての区切り文字で分割されます。


$file = fopen("fruits.csv", "r");
$fruits = [];

while (($row = fgetcsv($file)) !== false) {
  $fruits[] = [
    "name" => $row[0],
    "price" => $row[1],
  ];
}

fclose($file);

var_dump($fruits);

このコードを実行すると、以下の出力が得られます。

array(3) =>
  0 => array(2) =>
    "name" => string(4) "りんご"
    "price" => string(3) "100"
  1 => array(2) =>
    "name" => string(4) "ぶどう"
    "price" => string(3) "200"
  2 => array(2) =>
    "name" => string(4) "みかん"
    "price" => string(3) "150"

例2: URLの分解

この例では、URL "" をスラッシュ (/) で分割し、ホスト名、パス、クエリ文字列を配列に格納します。

$url = "https://www.example.com/path/to/file.html?param1=value1&param2=value2";
$url_parts = parse_url($url);

var_dump($url_parts);
array(5) =>
  "scheme" => string(4) "https"
  "host" => string(12) "www.example.com"
  "path" => string(10) "/path/to/file.html"
  "query" => string(20) "param1=value1&param2=value2"
  "fragment" => NULL

例3: テキストデータの処理

この例では、文章 "Hello, world! This is a sample text." をスペースと句読点で分割し、単語や文の単位で処理します。

$text = "Hello, world! This is a sample text.";
$words = preg_split("/\s+/", $text);

foreach ($words as $word) {
  echo $word . " ";
}
Hello world This is a sample text
  • より複雑な処理を行う場合は、複数の関数を組み合わせることもできます。
  • explode関数以外にも、preg_split()str_split() などの関数も文字列処理に役立ちます。
  • 上記のコードはあくまで一例であり、状況に応じて自由に改変することができます。


preg_split 関数

正規表現を使用して文字列を分割する関数です。 explode 関数よりも柔軟な区切り文字の指定が可能で、複数の区切り文字を同時に指定したり、部分一致による分割などもできます。

$str = "りんご,ぶどう,みかん";
$fruits = preg_split("/[,| ]/", $str);
var_dump($fruits);

この例では、カンマ (,) 、パイプ (|) 、空白 () のいずれかを区切り文字として $str 文字列を分割しています。

str_split 関数

文字列を1文字ずつ配列に格納する関数です。文字列を単純に分割したい場合や、個々の文字に処理を施したい場合に適しています。

$str = "りんご";
$chars = str_split($str);
var_dump($chars);

この例では、$str 文字列を1文字ずつ $chars 配列に格納しています。

サブストリング操作

substr 関数などを組み合わせて、部分文字列を抽出し、それを新しい文字列として扱うことで、分割と同様の効果を得ることができます。

$str = "りんご,ぶどう,みかん";
$fruits = [];

$pos = 0;
while (($len = strpos($str, ",", $pos)) !== false) {
  $fruits[] = substr($str, $pos, $len - $pos);
  $pos = $len + 1;
}
$fruits[] = substr($str, $pos);

var_dump($fruits);

この例では、カンマ (,) を区切り文字として $str 文字列を分割し、各部分文字列を $fruits 配列に格納しています。

それぞれの使い分け

  • 部分文字列の抽出と結合を組み合わせた処理が必要な場合
    サブストリング操作
  • 文字列を1文字ずつ処理したい場合
    str_split 関数
  • 柔軟な区切り文字の指定が必要な場合
    preg_split 関数
  • シンプルでわかりやすい分割処理が必要な場合
    explode 関数

上記以外にも、mb_split関数やstr_word_count関数など、状況に応じて様々な関数を選択することができます。それぞれの関数の詳細については、PHPのマニュアルリファレンスを参照してください。