Menu

PHPのimplode():配列の要素を連結して文字列にする

implode(', ', $array)は、配列の値を間に区切り文字を挟んで1つの文字列につなぎます。キー付きのimplode、連想配列、HTMLのリストの作成、implodeとjoinの違いを学びます。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

implode($separator, $array)は、配列の値を各ペアの間に$separatorを挟んで1つの文字列につなぎます:implode(', ', ['red', 'green', 'blue'])は"red, green, blue"を返します。

区切り文字は要素の間にだけ入り、最初の要素の前や最後の要素のあとには決して入りません。文字列を配列に分割するexplode()の逆の処理です。

構文

implode(string $separator, array $array): string
implode(array $array): string   // separator defaults to ""

区切り文字が先です。古いコードでは、配列を先に渡していることがあります(implode($array, ', '))。この順番はPHP 7.4で非推奨になり、PHP 8.0で削除されたので、TypeError: implode(): Argument #2 ($array) must be of type ?array, string givenが投げられます。

implodeとjoinの違い

join()はimplode()の別名です。同じ引数を受け取り、同じ文字列を返すので、どちらかを選んで統一しましょう。

数値、真偽値、nullはどうなるか

各値はまず文字列に変換されます。数値は予想どおりに出力され、trueは"1"に、falseとnullは空文字列になるので、区切り文字が2つ続いて残ります。

連想配列をimplodeする

implode()はキーを無視して値だけをつなぎます。key=valueのペアにするには、array_map()でキーと値から各部分を作ってからつなぎます。http_build_query()はURLのクエリ文字列に対して同じことを行い、空白や特殊文字のエンコードもします。

同じパターンでキーだけをつなぐこともできます:implode(', ', array_keys($user))。キーと値については連想配列のページで詳しく説明しています。

改行でつなぐ、HTMLのリストを作る

区切り文字にはどんな文字列でも使えます。"\n"(ダブルクォート)なら各値が1行ずつになり、テキストファイルやコマンドラインの出力に便利です。HTMLタグを区切り文字にすれば、implode()でリストを1行で作れます。次のブロックを実行すると、Pageタブに描画されたリストが表示されます。

つなぐ前に各値をhtmlspecialchars()でエスケープしておけば、<b>のような値がマークアップになることはありません。

最後の項目の前に"and"を付けてつなぐ

人が読むリストでは、たいてい最後の要素の前に"and"が必要です。最後の要素を取り出し、残りをつないでから、最後に足します。

よくあるミス:ネストした配列

implode()は1つの階層しか扱いません。それ自体が配列である要素はArrayという単語に変換され、PHPは警告を表示します。

<?php
echo implode(', ', ['red', ['orange', 'yellow']]);
Warning: Array to string conversion in /home/index.php on line 2
red, Array

内側の配列を先に平らにするか、それぞれを別々につなぎます。

よくある質問

PHPのimplode()は何をしますか?

配列の値を、間に区切り文字を挟んで1つの文字列につなぎます:implode(', ', ['a', 'b', 'c'])は"a, b, c"を返します。explode()の逆です。

implode()とjoin()の違いは何ですか?

ありません。join()はimplode()の別名で、引数も結果も同じです。ほとんどのコードで目にするのはimplode()という名前です。

連想配列をキー付きでimplodeするには?

implode()が使うのは値だけです。キーも含めるには、先に各部分を作ります:implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($a), $a))。URLのクエリ文字列なら、http_build_query($a)が1回の呼び出しでこれを行います。

PHP 8でimplode()がTypeErrorになるのはなぜですか?

引数が古い順番だからです。implode($array, ', ')はPHP 7.4で非推奨になり、PHP 8.0で削除されました。区切り文字を先に書きます:implode(', ', $array)。

PHPで配列をカンマ区切りの文字列に変換するには?

implode(',', $array)です。カンマのあとに空白が欲しければ、区切り文字に', 'を使います。CSVファイルには、カンマを含む値を引用符で囲んでくれるfputcsv()を使います。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める