この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:爽健
更新日時:2026-06-11 07:12:00

タイトル: カンマ区切りの文字列を配列に変換
SEOタイトル: カンマ区切り文字列 → 配列変換まとめ(JavaScript split / PHP explode / Python

この記事の要点
  • 基本は split / explode。JS: str.split(",") / PHP: explode(",", $str) / Python: str.split(",")
  • 空白除去は map で trim: JS str.split(",").map(s => s.trim()) / PHP array_map("trim", explode(",", $str))
  • 空要素フィルタ: JS .filter(Boolean) / PHP array_filter() / Python リスト内包 [s for s in ... if s]
  • CSV(クォート / エスケープ / 改行を含む)は 必ず CSV パーサ: PHP str_getcsv(), Python csv.reader, JS Papa Parse
  • 正規表現分割で複数区切り: JS str.split(/[,;]\s*/)。複雑な構造化データは split を使わず JSON / CSV ライブラリを使うのが安全

JavaScript: String.prototype.split

'apple,banana,cherry'.split(',');
// ['apple', 'banana', 'cherry']

// 空白を含む場合
'apple, banana , cherry'.split(',');
// ['apple', ' banana ', ' cherry']   ← 空白付き

// trim でクリーンに
'apple, banana , cherry'.split(',').map(s => s.trim());
// ['apple', 'banana', 'cherry']

// 空要素を除く
'a,,b,'.split(',');                  // ['a', '', 'b', '']
'a,,b,'.split(',').filter(Boolean);  // ['a', 'b']

// 分割数の制限
'a,b,c,d'.split(',', 2);   // ['a', 'b']

// 数値配列に
'1,2,3,4'.split(',').map(Number);     // [1, 2, 3, 4]
'1, 2, 3'.split(',').map(s => parseInt(s, 10));

// 複数の区切り(正規表現)
'a,b;c d'.split(/[,;\s]+/);  // ['a', 'b', 'c', 'd']

PHP: explode と str_getcsv

<?php
$str = 'apple,banana,cherry';

// 基本
$arr = explode(',', $str);
// ['apple', 'banana', 'cherry']

// 空白除去
$arr = array_map('trim', explode(',', ' apple , banana , cherry '));
// ['apple', 'banana', 'cherry']

// 空要素除去
$arr = array_filter(explode(',', 'a,,b,'), fn($v) => $v !== '');
// [0 => 'a', 2 => 'b']   ← キーが歯抜けに注意

// キーを振り直す
$arr = array_values($arr);
// ['a', 'b']

// 数値化
$nums = array_map('intval', explode(',', '1,2,3'));
// [1, 2, 3]

// 分割数の制限
explode(',', 'a,b,c,d', 2);   // ['a', 'b,c,d']

// CSV(クォート / エスケープ対応)
$csv = '"Hello, World",foo,"bar ""baz"""';
$arr = str_getcsv($csv);
// ['Hello, World', 'foo', 'bar "baz"']

Python: split と csv モジュール

# 基本
'apple,banana,cherry'.split(',')
# ['apple', 'banana', 'cherry']

# 空白除去
[s.strip() for s in 'apple, banana , cherry'.split(',')]
# ['apple', 'banana', 'cherry']

# 空要素除去
[s for s in 'a,,b,'.split(',') if s]
# ['a', 'b']

# 数値化
list(map(int, '1,2,3'.split(',')))
# [1, 2, 3]

# 分割数の制限
'a,b,c,d'.split(',', maxsplit=2)
# ['a', 'b', 'c,d']

# 複数の区切り
import re
re.split(r'[,;\s]+', 'a,b;c d')
# ['a', 'b', 'c', 'd']

# CSV
import csv
import io
reader = csv.reader(io.StringIO('&quot;Hello, World&quot;,foo,bar'))
for row in reader:
    print(row)
# ['Hello, World', 'foo', 'bar']

言語別早見表

言語基本CSV
JavaScriptstr.split(',')Papa Parse
PHPexplode(',', $str)str_getcsv()
Pythonstr.split(',')csv.reader
Javastr.split(",")OpenCSV / Apache Commons CSV
C#str.Split(',')CsvHelper
Rubystr.split(',')CSV.parse
Gostrings.Split(s, ",")encoding/csv
SQL (MySQL)SUBSTRING_INDEXFIND_IN_SET

CSV は必ず CSV パーサを使う

split で CSV をパースするのは禁忌。クォート、エスケープ、フィールド内改行に対応できません:

# 危険な CSV
name,address,note
&quot;山田 太郎&quot;,&quot;東京都, 千代田区&quot;,&quot;彼は &quot;&quot;エキスパート&quot;&quot; だ&quot;

# split(',') すると壊れる
# → ['&quot;山田 太郎&quot;', '&quot;東京都', ' 千代田区&quot;', ... ]  ← クォート内のカンマを誤分割

JavaScript で本格 CSV: Papa Parse

// npm install papaparse
import Papa from 'papaparse';

const csv = `name,age,city
山田太郎,30,&quot;東京都, 千代田区&quot;
鈴木一郎,25,大阪府`;

const result = Papa.parse(csv, {
  header: true,
  skipEmptyLines: true,
  dynamicTyping: true,  // 数値を自動変換
});

console.log(result.data);
// [
//   { name: '山田太郎', age: 30, city: '東京都, 千代田区' },
//   { name: '鈴木一郎', age: 25, city: '大阪府' }
// ]

SQL: カンマ区切り文字列を行に展開

-- MySQL 8+ / Postgres / SQLite で利用可能
-- 例: 'a,b,c' を 3 行に分解

-- MySQL 8 (再帰 CTE)
WITH RECURSIVE split(word, str) AS (
  SELECT
    SUBSTRING_INDEX('apple,banana,cherry', ',', 1),
    SUBSTRING(CONCAT('apple,banana,cherry', ','),
              LENGTH(SUBSTRING_INDEX('apple,banana,cherry', ',', 1)) + 2)
  UNION ALL
  SELECT
    SUBSTRING_INDEX(str, ',', 1),
    SUBSTRING(str, LENGTH(SUBSTRING_INDEX(str, ',', 1)) + 2)
  FROM split WHERE str <> ''
)
SELECT word FROM split WHERE word <> '';

-- Postgres は string_to_array + unnest
SELECT unnest(string_to_array('apple,banana,cherry', ','));

-- SQL Server 2016+ は STRING_SPLIT
SELECT value FROM STRING_SPLIT('apple,banana,cherry', ',');

逆: 配列 → カンマ区切り文字列

['a', 'b', 'c'].join(',');        // 'a,b,c'
['a', 'b', 'c'].join(', ');       // 'a, b, c'

// PHP
implode(',', ['a', 'b', 'c']);    // 'a,b,c'

// Python
','.join(['a', 'b', 'c'])         # 'a,b,c'
', '.join(map(str, [1, 2, 3]))    # '1, 2, 3'   ← int を str 化が必要

FAQ

Q: 末尾のカンマで空要素が残る
A: 'a,b,'.split(',')['a', 'b', '']。空文字を除外したいなら .filter(Boolean).filter(s => s !== '') を使ってください。

Q: タブ区切り (TSV) の場合は
A: str.split('\t') でも動きますが、CSV パーサに delimiter: '\t' を渡すのが安全。

Q: ネストされた配列を CSV にしたい
A: CSV は 2 次元表形式が前提。ネスト構造には JSON を使うのが筋。CSV にどうしても入れるなら、内部をエスケープ済 JSON 文字列にしてセルに格納します。