explode() / implode()
| 対応: | PHP 4(2000) |
|---|
文字列を指定した区切り文字で分割して配列にしたり、配列の要素を結合して文字列にしたりします。CSVデータの処理やURLの分解など、さまざまな場面で活用されます。
構文
// 区切り文字で分割して配列にする explode($separator, $string, $limit); // 配列の要素を結合して文字列にする implode($separator, $array); // 文字列を指定した長さで分割して配列にする str_split($string, $length);
関数一覧
| 関数 | 概要 |
|---|---|
| explode($separator, $string, $limit) | $separator で $string を分割し、配列を返します。$limit は分割数の上限で省略可能です。 |
| implode($separator, $array) | $array の各要素を $separator で結合した文字列を返します。 |
| str_split($string, $length) | 文字列を $length 文字ずつに分割して配列を返します。$length の既定値は1です。 |
戻り値
『explode()』『str_split()』は配列を返します。『implode()』は結合された文字列を返します。
サンプルコード
sample_explode.php
<?php
// カンマ区切りの文字列を配列に分割する
$csv = "五条悟,虎杖悠仁,伏黒恵";
$members = explode(",", $csv);
var_dump($members);
// 分割数の上限を指定する
$data = "五条悟:術師:東京都立呪術高等専門学校:五条家";
$parts = explode(":", $data, 3);
var_dump($parts); // 残りはまとめて最後の要素になる
// 配列を文字列に結合する
$words = ["PHP", "は", "楽しい"];
echo implode("", $words);
// 区切り文字を指定して結合する
$tags = ["HTML", "CSS", "JavaScript"];
echo implode(", ", $tags);
// SQLの IN 句を組み立てる
$ids = [1, 5, 12, 23];
$in_clause = implode(",", $ids);
echo "SELECT * FROM users WHERE id IN ($in_clause)";
// str_split() で1文字ずつ分割する
$chars = str_split("Hello");
var_dump($chars);
// str_split() で指定した長さごとに分割する
$code = "ABCDEFGHIJ";
$chunks = str_split($code, 3);
var_dump($chunks);
// パスの分解に活用する
$path = "/var/www/html/index.php";
$segments = explode("/", trim($path, "/"));
var_dump($segments);
php sample_explode.php
array(3) {
[0]=>
string(9) "五条悟"
[1]=>
string(12) "虎杖悠仁"
[2]=>
string(9) "伏黒恵"
}
array(3) {
[0]=>
string(9) "五条悟"
[1]=>
string(6) "術師"
[2]=>
string(41) "東京都立呪術高等専門学校:五条家"
}
PHPは楽しい
HTML, CSS, JavaScript
SELECT * FROM users WHERE id IN (1,5,12,23)
array(5) {
[0]=>
string(1) "H"
[1]=>
string(1) "e"
[2]=>
string(1) "l"
[3]=>
string(1) "l"
[4]=>
string(1) "o"
}
array(4) {
[0]=>
string(3) "ABC"
[1]=>
string(3) "DEF"
[2]=>
string(3) "GHI"
[3]=>
string(1) "J"
}
array(4) {
[0]=>
string(3) "var"
[1]=>
string(3) "www"
[2]=>
string(4) "html"
[3]=>
string(9) "index.php"
}
概要
『explode()』と『implode()』は文字列と配列の相互変換を行う関数です。CSVデータの処理、URLやファイルパスの分解、SQL文の組み立てなど、PHPの開発では非常に頻繁に使われます。
『explode()』の第3引数に正の数を指定すると分割数の上限を設定でき、最後の要素に残りの文字列がまとめて格納されます。負の数を指定すると、末尾からその数だけ要素が除外されます。区切り文字に空文字列を指定するとエラーになるため注意が必要です。1文字ずつの分割には『str_split()』を使います。
『str_split()』は区切り文字ではなく文字数で分割する関数で、固定長データの処理やチャンク分割に便利です。文字列の置換には『str_replace()』、文字列の検索には『strpos()』を参照してください。
explode()の区切り文字に空文字列を渡すとエラー
explode()の第1引数に空文字列("")を渡すとValueErrorが発生します。1文字ずつに分割したい場合はstr_split()を使います。
explode_split.php
<?php
// 空文字列を渡すとエラーになる(NG)
$parts = explode("", "五条悟");
// ValueError: explode(): Argument #1 ($separator) cannot be empty
<?php
// 1文字ずつに分割するには str_split() を使う(OK)
$chars = str_split("五条悟");
var_dump($chars);
php explode_split.php
array(3) {
[0]=>
string(3) "五"
[1]=>
string(3) "条"
[2]=>
string(3) "悟"
}
implode()でnull値を含む配列を結合するとNoticeが出る
PHP 8.1以降、null値を文字列として結合しようとするとDeprecation Noticeが出ます。配列にnullが混入している場合は、事前にarray_filter()でnullを除去してから結合します。
implode_null.php
<?php
// null値を含む配列をそのままimplodeするとNoticeが出る(PHP 8.1以降)
$names = ["虎杖悠仁", null, "伏黒恵"];
echo implode(", ", $names);
// Deprecated: Implicit conversion from null to string
// array_filter() で null を除去してから結合する
$filtered = array_filter($names, function ($v) { return $v !== null; });
echo implode(", ", array_values($filtered));
php implode_null.php 虎杖悠仁, 伏黒恵
limitに負の値を渡すと末尾の要素が除外される
explode()のlimitに負の数を渡すと、末尾からその数だけ要素が除外された配列が返されます。あまり使われない挙動ですが、知っておくと役立つ場合があります。
explode_limit.php
<?php
$data = "釘崎野薔薇:東京都立呪術高等専門学校:1年:術師";
// limit が正の場合(分割数の上限)
$parts = explode(":", $data, 3);
var_dump($parts); // array("釘崎野薔薇", "東京都立呪術高等専門学校", "1年:術師")
// limit が負の場合(末尾から除外)
$parts2 = explode(":", $data, -1);
var_dump($parts2); // 末尾の要素1個を除外した配列
php explode_limit.php
array(3) {
[0]=>
string(12) "釘崎野薔薇"
[1]=>
string(33) "東京都立呪術高等専門学校"
[2]=>
string(10) "1年:術師"
}
array(3) {
[0]=>
string(12) "釘崎野薔薇"
[1]=>
string(33) "東京都立呪術高等専門学校"
[2]=>
string(4) "1年"
}
実践パターン
CSVの1行を配列に変換
CSVデータの各行をexplode()で分割し、配列として処理する基本パターンです。
csv_parse.php
<?php
$csv_line = "五条悟,東京都立呪術高等専門学校,教師,無下限呪術";
$fields = explode(",", $csv_line);
echo "名前: " . $fields[0] . "\n";
echo "所属: " . $fields[1] . "\n";
echo "役職: " . $fields[2] . "\n";
php csv_parse.php 名前: 五条悟 所属:東京都立呪術高等専門学校 役職: 教師
配列を区切り文字でSQL IN句に変換
整数IDの配列をimplode()で結合してSQL IN句を組み立てる例です。
sql_in.php
<?php
$fighter_ids = [101, 102, 103, 104];
$in_clause = implode(",", $fighter_ids);
$sql = "SELECT * FROM fighters WHERE id IN ({$in_clause})";
echo $sql;
php sql_in.php SELECT * FROM fighters WHERE id IN (101,102,103,104)
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。