なぜ「配列を改行文字列に変換」したくなるのか
さっきまでやっていた「複数行テキストを配列化」の逆方向が、
今回の「配列を改行文字列に変換」です。
例えば、こんな場面がよくあります。
- 画面のテキストエリアに、配列の内容を「1 行ずつ」表示したい
- DB には 1 つのテキストカラムで保存したいが、アプリ内では配列で扱いたい
- 設定値のリストを、管理画面では複数行テキストとして編集させたい
こういうときに、
['山田太郎', '佐藤花子', '鈴木一郎']
PHPという配列を、
山田太郎
佐藤花子
鈴木一郎
という「改行区切りの文字列」に変換するユーティリティがあると、とても扱いやすくなります。
コアとなる関数:配列 → 改行区切り文字列
一番シンプルな実装
やることはシンプルで、「配列の各要素を文字列にして、改行で implode する」です。
/**
* 配列を改行区切りの文字列に変換する
*/
function lines_to_text(array $lines, string $eol = "\n"): string
{
// すべて文字列にキャストしてから結合しておくと安全
$stringLines = array_map(
static fn($v) => (string)$v,
$lines
);
return implode($eol, $stringLines);
}
PHP使い方の例です。
$names = ['山田太郎', '佐藤花子', '鈴木一郎'];
$text = lines_to_text($names);
echo $text;
/*
山田太郎
佐藤花子
鈴木一郎
*/
PHPここでのポイントは 2 つです。
- 各要素を
(string)にキャストしておくことで、intやfloatが混ざっていても安全に扱える - 改行コードを引数
$eolで変えられるようにしておくと、用途に応じて柔軟に使える
改行コードをどうするかを最初に決めておく
画面用・内部用・ファイル用で使い分ける
改行コードには主に 3 種類ありました。
\n… Unix 系(Linux・macOS、ブラウザのテキストエリアも基本これ)\r\n… Windows 系(メモ帳など)\r… ほぼ使わない
実務では、だいたい次のように決めておくと楽です。
- アプリ内部・ブラウザのテキストエリア用 →
\n - Windows のツールで開く前提のファイル(.txt など) →
\r\n
なので、ユーティリティのデフォルトは \n にしておき、
必要に応じて "\r\n" を渡せるようにしておくのが現実的です。
$names = ['山田太郎', '佐藤花子', '鈴木一郎'];
// テキストエリア用
$textForTextarea = lines_to_text($names, "\n");
// Windows 用ファイル出力
$textForFile = lines_to_text($names, "\r\n");
PHP例題:配列で持っている設定値をテキストエリアに表示する
ユースケースのイメージ
例えば、アプリ内では「禁止ワードリスト」を配列で持っているとします。
$ngWords = ['死ね', 'バカ', 'スパム'];
PHP管理画面では、これをテキストエリアで編集できるようにしたい。
そのときに使うのが「配列 → 改行文字列」です。
表示側のコード例
$ngWords = ['死ね', 'バカ', 'スパム'];
$text = lines_to_text($ngWords, "\n");
?>
<textarea name="ng_words" rows="5" cols="40"><?= htmlspecialchars($text, ENT_QUOTES, 'UTF-8') ?></textarea>
PHPテキストエリアには、こう表示されます。
死ね
バカ
スパム
ユーザーが編集して送信したら、
今度は「複数行テキストを配列化」のユーティリティで逆変換すれば OK です。
$raw = $_POST['ng_words'] ?? '';
$ngWords = text_to_non_empty_lines($raw);
// これでまた ['死ね', 'バカ', 'スパム'] のような配列に戻る
PHPここでの重要ポイントは、
- 「配列 ⇔ 複数行テキスト」を行き来できるようにしておくと、
内部ロジックと管理画面の両方がシンプルになる
ということです。
もう一歩:前後の空白や null をどう扱うか
要素のトリムを一緒にやりたい場合
配列の中に「前後に余計な空白がついた文字列」が混ざっていることもあります。
改行文字列にする前に、ついでにトリムしてしまいたい場合は、こう書けます。
/**
* 配列を「トリム済みの改行文字列」に変換する
*/
function lines_to_trimmed_text(array $lines, string $eol = "\n"): string
{
$stringLines = array_map(
static fn($v) => trim((string)$v),
$lines
);
return implode($eol, $stringLines);
}
PHPnull や空文字をスキップしたい場合
「意味のある行だけを出したい」場合は、フィルタも挟めます。
/**
* null や空文字を除外してから改行文字列にする
*/
function lines_to_text_skip_empty(array $lines, string $eol = "\n"): string
{
$result = [];
foreach ($lines as $v) {
$s = trim((string)$v);
if ($s === '') {
continue;
}
$result[] = $s;
}
return implode($eol, $result);
}
PHPこうしておくと、「空の要素が混ざっている配列」をそのまま出力しても、
余計な空行ができずにスッキリしたテキストになります。
まとめ:今日からの「配列を改行文字列に変換」ユーティリティ
押さえておきたいポイントは、次のとおりです。
- 配列 → 改行文字列は、「各要素を文字列化して、改行で
implode」するだけ - 改行コードは用途に応じて
\nと\r\nを使い分ける - トリムや空要素の除外を一緒にやると、実務でさらに使いやすくなる
まずは、このシンプルな 1 本をプロジェクトに置いておくと便利です。
function lines_to_text(array $lines, string $eol = "\n"): string
{
$stringLines = array_map(
static fn($v) => (string)$v,
$lines
);
return implode($eol, $stringLines);
}
PHPそして、必要になったら「トリム版」「空要素スキップ版」を足していくイメージです。
もし、あなたのコードのどこかで「implode("\n", $array) をあちこちで直書きしている」なら、そこをこのユーティリティに置き換えるだけで、「改行コードの統一」と「型の扱い」が一気に整理されます。
