💡 今日の3行まとめ
  • 配列の要素を1つの文字列に繋げるときは foreach ではなく implode('区切り文字', $配列) を使う
  • implode() は要素と要素の「間」にだけ区切り文字を入れるため、末尾に余計な記号が残らない
  • 空の配列 [] を渡すと空文字("")が返るので、未入力時は「未設定」と分岐させると親切

1. 今日のお題とゴール

求人データのスキル配列や条件配列を、画面で見やすいスラッシュ区切り(' / ')の1行テキストに整形して出力する処理を作ります。

  • 複数の要素がある配列は ' / ' で綺麗に連結して表示する
  • 要素が1つだけの配列(['リモート可'])には区切り文字を付けない
  • 空の配列([])のときは '未設定' と表示する
// 期待する出力例
必要スキル: PHP / MySQL / Docker
勤務条件: リモート可
優遇スキル: 未設定

2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード

❌ やりがちなNGコードBefore
<?php
$skills = ['PHP', 'MySQL', 'Docker'];
$text = '';

foreach ($skills as $skill) {
    $text .= $skill . ' / '; // 毎回後ろに区切り文字を足してしまう
}

// ❌ 末尾に余計な「 / 」が残ってしまう!(出力: PHP / MySQL / Docker / )
echo "必要スキル: {$text}\n";

foreach ループと文字列連結(.=)で繋ごうとすると、最後の要素の後ろにも ' / ' が付いてしまいます。これを消すためにループ回数を数える if 文を足すと、コードが長くなりバグの原因になります。

⭕ コピペで動く正解コード(PHP 8.3+)After
<?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つのポイント

1implode(区切り文字, 配列) で要素の「間」だけを繋ぐ

第1引数に区切り文字、第2引数に配列を渡すだけで、要素同士の間にだけ区切り文字を挟んだ文字列を作ってくれます。要素が1件だけのときは区切り文字が一切付かず、そのままの値("リモート可")が返ります。

2空の配列 [] を渡すと「空文字 ""」が返る

implode(' / ', []) のように中身が空の配列を渡してもエラーにはならず、空文字("")が安全に返ります。画面表示で空欄にしたくない場合は、事前に $items === [] で判定して初期テキストを入れましょう。

3逆方向の変換(文字列 → 配列)は explode() とセットで覚える

配列を1つの文字列にまとめるのが implode() なら、カンマ区切りの文字列を配列に分割するのが explode() です。実務でもペアで使う場面が多いため、「まとめる=implode」「バラす=explode」と対で押さえておくと迷いません。

4. 1分ミニチャレンジ

🚀 手を動かしてみよう

正解コード11行目の $separator = ' / '; を、読点($separator = '、';)や矢印($separator = ' → ';)に書き換えて実行してみましょう。ループ処理を1行も触ることなく、出力フォーマットを PHP、MySQL、Docker へ一瞬で切り替えられることが確認できます。