- 配列の要素を1つの文字列に繋げるときは
foreachではなくimplode('区切り文字', $配列)を使う implode()は要素と要素の「間」にだけ区切り文字を入れるため、末尾に余計な記号が残らない- 空の配列
[]を渡すと空文字("")が返るので、未入力時は「未設定」と分岐させると親切
1. 今日のお題とゴール
求人データのスキル配列や条件配列を、画面で見やすいスラッシュ区切り(' / ')の1行テキストに整形して出力する処理を作ります。
- 複数の要素がある配列は
' / 'で綺麗に連結して表示する - 要素が1つだけの配列(
['リモート可'])には区切り文字を付けない - 空の配列(
[])のときは'未設定'と表示する
// 期待する出力例
必要スキル: PHP / MySQL / Docker
勤務条件: リモート可
優遇スキル: 未設定
2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード
<?php
$skills = ['PHP', 'MySQL', 'Docker'];
$text = '';
foreach ($skills as $skill) {
$text .= $skill . ' / '; // 毎回後ろに区切り文字を足してしまう
}
// ❌ 末尾に余計な「 / 」が残ってしまう!(出力: PHP / MySQL / Docker / )
echo "必要スキル: {$text}\n";
foreach ループと文字列連結(.=)で繋ごうとすると、最後の要素の後ろにも ' / ' が付いてしまいます。これを消すためにループ回数を数える if 文を足すと、コードが長くなりバグの原因になります。
<?php
declare(strict_types=1);
// 求人票の項目ごとのタグ一覧
$jobPostings = [
'必要スキル' => ['PHP', 'MySQL', 'Docker'],
'勤務条件' => ['リモート可'],
'優遇スキル' => [],
];
$separator = ' / '; // 区切り文字
foreach ($jobPostings as $label => $items) {
// 1. 配列が空なら「未設定」、要素があれば implode() で連結する
if ($items === []) {
$formatted = '未設定';
} else {
$formatted = implode($separator, $items);
}
// 2. 末尾に余計な区切り文字がつかず綺麗に出力される
echo "{$label}: {$formatted}\n";
}
3. ここだけ押さえる!3つのポイント
implode(区切り文字, 配列) で要素の「間」だけを繋ぐ第1引数に区切り文字、第2引数に配列を渡すだけで、要素同士の間にだけ区切り文字を挟んだ文字列を作ってくれます。要素が1件だけのときは区切り文字が一切付かず、そのままの値("リモート可")が返ります。
[] を渡すと「空文字 ""」が返るimplode(' / ', []) のように中身が空の配列を渡してもエラーにはならず、空文字("")が安全に返ります。画面表示で空欄にしたくない場合は、事前に $items === [] で判定して初期テキストを入れましょう。
explode() とセットで覚える配列を1つの文字列にまとめるのが implode() なら、カンマ区切りの文字列を配列に分割するのが explode() です。実務でもペアで使う場面が多いため、「まとめる=implode」「バラす=explode」と対で押さえておくと迷いません。
4. 1分ミニチャレンジ
🚀 手を動かしてみよう
正解コード11行目の $separator = ' / '; を、読点($separator = '、';)や矢印($separator = ' → ';)に書き換えて実行してみましょう。ループ処理を1行も触ることなく、出力フォーマットを PHP、MySQL、Docker へ一瞬で切り替えられることが確認できます。