何をしたいユーティリティなのか
「カンマ区切り文字列 → 配列」は、 例えばこんな入力を、
"apple,orange,banana"
こういう配列に変換するユーティリティです。
["apple", "orange", "banana"]
CSV 風の入力、ID の一覧、メールアドレスの複数指定など、 「カンマで区切って複数指定したい」場面は業務でめちゃくちゃ多いです。
毎回 explode(',', ...) と書いてもいいのですが、 実務では「前後の空白」「連続カンマ」「末尾のカンマ」など、地味な罠がたくさんあります。 それを一気に吸収してくれるのが、このユーティリティです。
素朴な explode の問題点を知る
explode(‘,’) だけだと困るケース
まずは、素朴な書き方を見てみます。
$input = 'apple,orange,banana';
$parts = explode(',', $input);
var_dump($parts);
PHPこれは期待通りです。
array(3) {
[0] => "apple"
[1] => "orange"
[2] => "banana"
}
PHPでも、現実の入力はもっと雑です。
$input = 'apple, orange , banana ,';
$parts = explode(',', $input);
var_dump($parts);
PHP結果はこうなります。
array(4) {
[0] => "apple"
[1] => " orange "
[2] => " banana "
[3] => ""
}
PHP問題点がいくつか見えます。
- 各要素の前後に空白が残っている
- 末尾のカンマで「空文字」ができている
業務で使うときは、ここをきれいに整えてから配列として扱いたいですよね。
基本方針:「分割 → トリム → 空要素除去」
やりたいことを順番に並べる
カンマ区切り文字列を「実務で使える配列」にするには、 だいたい次の 3 ステップを踏みます。
explode(',', $input)でいったん分割する- 各要素の前後の空白を
trimで削る - 空文字(
"")になった要素は捨てる
これを毎回手書きするのではなく、 1 本のユーティリティ関数にまとめておくのが賢いやり方です。
実装例:カンマ区切り文字列 → 配列
コアとなる関数
function split_by_comma(string $input): array
{
// 全体の前後の空白を削る
$input = trim($input);
// そもそも空なら空配列
if ($input === '') {
return [];
}
// まずカンマで分割
$rawParts = explode(',', $input);
$result = [];
foreach ($rawParts as $part) {
// 各要素の前後の空白を削る
$value = trim($part);
// 空文字はスキップ
if ($value === '') {
continue;
}
$result[] = $value;
}
return $result;
}
PHPここでの重要ポイントは 3 つです。
- 最初に
trimして、全体の前後の空白を落としていること - 各要素に対しても
trimをかけていること - 空文字は結果に入れないこと
これで、「末尾のカンマ」「連続カンマ」「前後の空白」などを、きれいに吸収できます。
例題で挙動を確認する
シンプルなカンマ区切り
$input = 'apple,orange,banana';
var_dump(split_by_comma($input));
PHP結果はこうです。
array(3) {
[0] => "apple"
[1] => "orange"
[2] => "banana"
}
PHP期待通りですね。
前後に空白がある場合
$input = ' apple,orange,banana ';
var_dump(split_by_comma($input));
PHP結果はこうです。
array(3) {
[0] => "apple"
[1] => "orange"
[2] => "banana"
}
PHP全体の trim によって、前後の空白は無視されています。
各要素に空白が混ざる場合
$input = 'apple, orange , banana ,';
var_dump(split_by_comma($input));
PHP結果はこうなります。
array(3) {
[0] => "apple"
[1] => "orange"
[2] => "banana"
}
PHP各要素の trim によって、 " orange " や " banana " がきれいに "orange", "banana" になり、 末尾の空文字はスキップされています。
連続カンマがある場合
$input = 'apple,,orange,,,banana';
var_dump(split_by_comma($input));
PHP結果はこうです。
array(3) {
[0] => "apple"
[1] => "orange"
[2] => "banana"
}
PHP連続カンマの間にできた空文字は、すべて捨てられています。
実務での使いどころ
ID の複数指定
管理画面などで、「対象ユーザー ID をカンマ区切りで入力してもらう」ケースがあります。
$rawIds = $_POST['user_ids'] ?? '';
$ids = split_by_comma($rawIds);
// 数値に変換しつつ、空や不正値を除去
$ids = array_map('intval', $ids);
$ids = array_filter($ids, fn($id) => $id > 0);
$ids = array_values(array_unique($ids));
PHPユーザーが、
"1, 2,3, 10,"
と入力しても、最終的には [1, 2, 3, 10] のようなきれいな配列になります。
メールアドレスの複数指定
通知設定などで、「複数のメールアドレスをカンマ区切りで入力してもらう」こともあります。
$rawEmails = $_POST['emails'] ?? '';
$emails = split_by_comma($rawEmails);
// 簡易的なバリデーション
$emails = array_filter($emails, fn($email) => filter_var($email, FILTER_VALIDATE_EMAIL));
$emails = array_values(array_unique($emails));
PHP"user1@example.com, user2@example.com , , user3@example.com"
のような入力でも、 空文字や余計な空白を取り除いた配列にできます。
もう一歩:全角カンマも扱いたい場合
日本語入力の「,」問題
日本語環境では、ユーザーが「全角カンマ(,)」で区切ってくることがあります。
"apple,orange,banana"
これをそのまま explode(',', ...) にかけても、 全角カンマは区切りとして扱われません。
そこで、前処理で「全角カンマを半角にそろえる」こともできます。
function split_by_comma_jp(string $input): array
{
// 全角カンマを半角に
$input = str_replace(',', ',', $input);
// あとはさっきと同じ
$input = trim($input);
if ($input === '') {
return [];
}
$rawParts = explode(',', $input);
$result = [];
foreach ($rawParts as $part) {
$value = trim($part);
if ($value === '') {
continue;
}
$result[] = $value;
}
return $result;
}
PHPこれで、
"apple, orange,banana"
も、きれいに ['apple', 'orange', 'banana'] に分割できます。
まとめ:今日からの「カンマ区切り文字列 → 配列」ユーティリティ
このユーティリティの本質は、「ユーザーが“なんとなくカンマで区切って入力したもの”を、きれいな配列にしてあげる」ことです。
そのために、
- 全体を
trimして前後の空白を落とす explode(',', ...)でいったん分割する- 各要素を
trimして、空文字は捨てる - 必要なら全角カンマも半角にそろえる
という処理を 1 本の関数に閉じ込めておきます。
もう一度、基本形を載せておきます。
function split_by_comma(string $input): array
{
$input = trim($input);
if ($input === '') {
return [];
}
$rawParts = explode(',', $input);
$result = [];
foreach ($rawParts as $part) {
$value = trim($part);
if ($value === '') {
continue;
}
$result[] = $value;
}
return $result;
}
PHPもし、あなたのコードのどこかで「explode(',', $_POST['ids'])」のような行があれば、 そこをこのユーティリティに差し替えてみてください。 前後の空白や余計なカンマに悩まされることが、かなり減ります。
