PHPで配列を扱っていると、複数の要素をひとつの文字列にまとめたい場面がよくあります。

例えば、
・ユーザーが入力した複数のキーワードをカンマ区切りで表示したいとき、
・データベースに保存する前に配列を一本の文字列に変換したいとき、
・CSVデータを生成したいとき
など、配列→文字列の変換は日常的な処理のひとつです。

そんなときにわざわざforeachでループを回していると、コードが長くなりがちで可読性も大きく下がってしまいます。
そこで便利なのが、PHPのimplode()関数です。

この記事では、PHP初心者でもすぐに使える「配列を文字列に結合する方法」を、実装例を交えながら丁寧に解説していきます。

implode()とは?基本の使い方

implode()は、配列の要素を指定した区切り文字でつなげて、ひとつの文字列にして返すPHPの関数です。

基本的な書き方はこちらです。

implode(string $separator, array $array): string

第1引数に区切り文字(セパレータ)、第2引数に連結したい配列を渡します。

実際にコードを書いてみると、このような感じで使います。

<?php
$data = ["data01", "data02", "data03", "data04", "data05"];
$result = implode("/", $data);
echo $result;
?>

出力結果はこちらです。

data01/data02/data03/data04/data05

たった1行で、配列の要素をスラッシュでつないだ文字列が得られます。
foreachでループを回す必要がなく、コードもシンプルに書けるのがimplode()の魅力です。

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

【重要】PHP8での引数順序の変更について

古いPHPコードをお使いの方は必ずご確認ください。

  • 以前は implode($array, $glue) のように引数を逆順で書いても動作していました。
  • しかし、PHP 7.4.0 で非推奨となり、PHP 8.0.0 以降では完全に削除されています。
  • PHP 8 環境で逆順に書くと Fatal error が発生してサイトが止まります。

<?php
// NG:PHP8では Fatal error になります
echo implode($data, "/");

// OK:正しい書き方
echo implode("/", $data);
?>

ちなみに、WordPressをお使いの場合、PHPのバージョンアップ時にこの変更が影響することがあります。
古いコードが残っている場合は、早めに修正しておきましょう。

区切り文字をいろいろ変えてみよう

implode()関数では、区切り文字はどんな文字列でも指定できます。
いくつか例を見てみましょう。

<?php
$items = ["りんご", "バナナ", "みかん"];

// カンマ区切り
echo implode(",", $items);
// 出力:りんご,バナナ,みかん

// 「・」区切り
echo implode("・", $items);
// 出力:りんご・バナナ・みかん

// 区切り文字なし(空文字)
echo implode("", $items);
// 出力:りんごバナナみかん
?>

なお、第1引数(区切り文字)は省略することも可能です。
ただ、その場合は空文字として処理されます。

よくある実装例

実際の開発でよく使われる場面を紹介します。

カンマ区切りでCSVライクな文字列を作る

<?php
$fields = ["name", "email", "phone"];
$csv_header = implode(", ", $fields);
echo $csv_header;
// 出力:name, email, phone
?>

CSVファイルのヘッダー行やデータ行を作成する際によく使われます。

SQLのIN句を動的に生成する

<?php
$ids = [1, 6, 12, 18, 24];
$id_str = implode(", ", $ids);
$sql = "SELECT name, email FROM users WHERE user_id IN ($id_str)";
echo $sql;
// 出力:SELECT name, email FROM users WHERE user_id IN (1, 6, 12, 18, 24)
?>

注意:ユーザーの入力値をそのままSQLに埋め込むのはSQLインジェクションの危険があります。実際の開発ではプレースホルダやPDOを使った安全な処理を行いましょう。

連想配列にも使える

連想配列の場合、implode()値のみを結合し、キーは無視されます。

<?php
$user = [
"name" => "田中",
"hobby" => "テニス",
"age" => "28",
];
$result = implode(", ", $user);
echo $result;
// 出力:田中, テニス, 28
?>

お問い合わせフォームのチェックボックス処理

複数選択できるチェックボックスの値をデータベースに保存したいときにも役立ちます。

<?php
// チェックボックスから送られてきた配列
$selected = ["メルマガ希望", "資料請求", "電話相談希望"];
$saved_value = implode("、", $selected);
echo $saved_value;
// 出力:メルマガ希望、資料請求、電話相談希望
?>

このような感じで、implode()は様々な場面で活用することができます。

implode()を使うときの注意点

implode()を使用する場合の注意点をまとめておきます。
もう一度チェックしておきましょう。

  • PHP8では引数の順序が固定されている
    第1引数に区切り文字、第2引数に配列の順番のみ有効です。逆順はエラーになります。
  • 配列以外を渡すとエラーになる
    implode()は配列専用の関数です。文字列や数値を直接渡すとエラーが発生します。
  • 多次元配列には対応していない
    配列の中にさらに配列が入っている多次元配列には使えません。
  • 空の配列を渡すと空文字列が返る
    要素が0件の配列を渡した場合、エラーにはならず空文字列("")が返ります。

配列かどうか不安な場合は、is_array()で確認してから処理するとより安全です。

<?php
$data = "data01"; // 配列ではなく文字列の場合
if (is_array($data)) {
$result = implode("/", $data);
echo $result;
} else {
echo "配列ではありません";
}
?>

join()との違いは?

PHPにはjoin()という関数もありますが、これはimplode()エイリアス(別名)です。
動作はまったく同じで、どちらを使っても結果は変わりません。

<?php
$items = ["a", "b", "c"];

echo implode("-", $items); // 出力:a-b-c
echo join("-", $items); // 出力:a-b-c(同じ結果)
?>

どちらを使っても問題ありませんが、公式マニュアルではimplode()が正式名称として扱われているため、チームで統一する場合はimplode()を使う方が無難です。

逆の操作はexplode()で

implode()とは逆に、文字列を区切り文字で分割して配列に変換するのがexplode()関数です。

<?php
$str = "りんご,バナナ,みかん";
$array = explode(",", $str);
print_r($array);
// 出力:Array ( [0] => りんご [1] => バナナ [2] => みかん )
?>

implode()で結合 → explode()で分割、という流れはセットで覚えておくと便利です。

【PHP】explode()の使い方と実装例。廃止されたsplit()との違いも紹介
【PHP】explode()の使い方と実装例。廃止されたsplit()との違いも紹介PHPのexplode()で文字列を分割する方法を解説。廃止されたsplit()からの移行方法やpreg_split()との使い分けも紹介します。...

まとめ

今回は、PHPユーザー向けに、配列を文字列に結合するimplode()関数の使い方を紹介しました。

  • 配列を文字列にまとめるならimplode()関数が一番シンプル
  • PHP8以降は引数の順序が「区切り文字→配列」に固定されており、逆順はエラーになる
  • 連想配列にも使えるが、結合されるのは値のみ(キーは無視)
  • join()implode()のエイリアスで、動作は同じ
  • 逆の操作(文字列→配列)にはexplode()を使う

implode()関数を使いこなすことで、配列処理のコードがぐっとスッキリします。
配列操作をさらに深く学びたい方は、PHPの配列関数一覧もチェックしてみましょう。

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