何をしたいユーティリティなのか
「配列 → カンマ区切り文字列」は、その名の通り、
['apple', 'orange', 'banana']
PHPを、
"apple,orange,banana"
PHPのような「1 本の文字列」に変換するユーティリティです。
業務だと、こういう場面でよく使います。
- DB に「カンマ区切り文字列」として保存したい
- 管理画面のテキストボックスに「カンマ区切りで表示」したい
- 外部 API に「カンマ区切りの ID リスト」を渡したい
毎回 implode(',', $array) と書いてもいいのですが、 実務では「空要素」「重複」「前後の空白」などを整えてから文字列化したほうが、後々トラブルが減ります。
素朴な implode の挙動を知る
implode(‘,’, $array) の基本
PHP には implode という関数があります。
$items = ['apple', 'orange', 'banana'];
$str = implode(',', $items);
echo $str; // apple,orange,banana
PHPこれはとてもシンプルで、「配列の要素を区切り文字でつなぐ」関数です。 ただし、そのまま使うと、こういうケースで困ります。
$items = ['apple', '', 'orange', ' banana ', null];
$str = implode(',', $items);
echo $str; // apple,,orange, banana ,
PHP問題点がいくつか見えます。
- 空文字のところで「連続カンマ」ができている
bananaの前後の空白がそのまま残っているnullが空文字として扱われて末尾にカンマだけ残っている
業務で使うときは、ここをきれいに整えてから文字列化したいですよね。
基本方針:「文字列化 → トリム → 空要素除去 → 重複除去 → implode」
やりたいことを順番に並べる
配列を「実務で使えるカンマ区切り文字列」にするには、 だいたい次のステップを踏みます。
- 各要素を文字列として扱える形にする(
(string)キャストなど) - 各要素の前後の空白を
trimで削る - 空文字(
"")になった要素は捨てる - 必要なら重複を消す
- 最後に
implode(',', $array)でつなぐ
これを毎回手書きするのではなく、 1 本のユーティリティ関数にまとめておくのが賢いやり方です。
実装例:配列 → カンマ区切り文字列
コアとなる関数
function join_with_comma(array $items, bool $unique = false): string
{
$normalized = [];
foreach ($items as $item) {
// まず文字列にキャスト
$value = (string)$item;
// 前後の空白を削る
$value = trim($value);
// 空文字はスキップ
if ($value === '') {
continue;
}
$normalized[] = $value;
}
// 重複を消したい場合
if ($unique) {
$normalized = array_values(array_unique($normalized));
}
// 要素がなければ空文字を返す
if ($normalized === []) {
return '';
}
// カンマで結合
return implode(',', $normalized);
}
PHPここでの重要ポイントは 4 つです。
- どんな値でも
(string)で文字列化していること - 各要素に対して
trimをかけていること - 空文字は結果に入れないこと
- オプションで重複を消せるようにしていること
これで、「空要素」「余計な空白」「重複」をきれいに吸収できます。
例題で挙動を確認する
シンプルな配列
$items = ['apple', 'orange', 'banana'];
echo join_with_comma($items);
// apple,orange,banana
PHP期待通りですね。
空文字や null が混ざる場合
$items = ['apple', '', 'orange', null, 'banana'];
echo join_with_comma($items);
// apple,orange,banana
PHP空文字と null はスキップされているので、 連続カンマや末尾の余計なカンマはできません。
前後に空白がある場合
$items = [' apple ', 'orange ', ' banana '];
echo join_with_comma($items);
// apple,orange,banana
PHP各要素の trim によって、 前後の空白がきれいに削られています。
重複を消したい場合
$items = ['apple', 'orange', 'apple', 'banana', 'orange'];
echo join_with_comma($items, true);
// apple,orange,banana
PHP$unique = true にすると、 array_unique によって重複が取り除かれます。
実務での使いどころ
DB に「カンマ区切り文字列」として保存する
例えば、ユーザーが選んだタグを配列で持っていて、 それを 1 カラムに「カンマ区切り文字列」として保存したいケースです。
$tags = ['php', 'backend', 'utility', 'php'];
$tagsStr = join_with_comma($tags, true);
// 例: users.tags カラムに保存
// php,backend,utility
PHP保存するときに重複を消しておけば、 後で読み出しても扱いやすくなります。
管理画面のテキストボックスに表示する
「カンマ区切りで編集できる」テキストボックスを用意したいとき、 配列から文字列に戻すのに使えます。
$emails = ['user1@example.com', 'user2@example.com', 'user3@example.com'];
$valueForInput = join_with_comma($emails);
// <input type="text" value="user1@example.com,user2@example.com,user3@example.com">
PHPユーザーが編集した文字列は、 前に作った「カンマ区切り文字列 → 配列」ユーティリティでまた配列に戻せます。
もう一歩:スペース付きのフォーマットにしたい場合
「カンマ+スペース」で見やすくしたい
人間が読むときには、"apple, orange, banana" のように 「カンマ+スペース」で区切られていたほうが見やすいことも多いです。
その場合は、区切り文字を ', ' に変えるだけです。
function join_with_comma_and_space(array $items, bool $unique = false): string
{
$normalized = [];
foreach ($items as $item) {
$value = trim((string)$item);
if ($value === '') {
continue;
}
$normalized[] = $value;
}
if ($unique) {
$normalized = array_values(array_unique($normalized));
}
if ($normalized === []) {
return '';
}
return implode(', ', $normalized);
}
PHP使い方の例です。
$items = ['apple', 'orange', 'banana'];
echo join_with_comma_and_space($items);
// apple, orange, banana
PHP「人間向けの表示」としては、こちらのほうが読みやすいですね。
まとめ:今日からの「配列 → カンマ区切り文字列」ユーティリティ
このユーティリティの本質は、「雑な配列を、きれいなカンマ区切り文字列に整えてあげる」ことです。
そのために、
- 各要素を文字列化する
- 前後の空白を
trimする - 空文字は捨てる
- 必要なら重複を消す
- 最後に
implode(',', ...)でつなぐ
という処理を 1 本の関数に閉じ込めておきます。
もう一度、基本形を載せておきます。
function join_with_comma(array $items, bool $unique = false): string
{
$normalized = [];
foreach ($items as $item) {
$value = trim((string)$item);
if ($value === '') {
continue;
}
$normalized[] = $value;
}
if ($unique) {
$normalized = array_values(array_unique($normalized));
}
if ($normalized === []) {
return '';
}
return implode(',', $normalized);
}
PHPもし、あなたのコードのどこかで「implode(',', $array) をそのまま使っている」箇所があれば、 そこをこのユーティリティに差し替えてみてください。 空要素や余計な空白、重複に悩まされることが、かなり減ります。
