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¶m2=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¶m2=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のマニュアルリファレンスを参照してください。