配列の基本

添字配列の作成・取得・要素追加

複数の値を 1 つの変数にまとめる「添字配列 (indexed array)」を扱うトピック。作成・アクセス・書き換え・走査・関数まで一通り押さえる。

このトピックで身につくこと

  • [1, 2, 3] のような添字配列を作って読み書きできる
  • count / array_sum / max / min などの基本関数を使える
  • for で配列を走査して合計・最大などを自前で求められる
  • explode でカンマ区切り入力を配列に、implode で配列を文字列にできる
  • array_push / pop / shift / unshift を使い分けられる

前提知識の要点

このトピックは hello の echo / 変数 / 入力と、loopfor ループを前提にする。要点だけ:

<?php
// 1) 出力 / 変数 / 整数入力
echo "hello\n";
$n = (int)trim(fgets(STDIN));

// 2) for ループ (0 から N-1 まで N 回)
for ($i = 0; $i < $n; $i++) {
    echo $i, "\n";
}

// 3) 合計を貯める (sum パターン)
$sum = 0;
for ($i = 1; $i <= $n; $i++) {
    $sum += $i;
}
echo $sum, "\n";

// 4) 配列の最小知識 (詳しくは ch01 以降で扱う)
$arr = [10, 20, 30];
print_r($arr);       // 全要素を見やすく出す
echo count($arr);    // 要素数 (この例なら 3)
▶ 3v4l で実行
やりたいこと 書き方
画面に出す echo "...";
入力 (整数) $n = (int)trim(fgets(STDIN));
N 回繰り返す for ($i = 0; $i < $n; $i++) { ... }
合計を貯める ループの外で $sum = 0; → 中で $sum += $x;

これで OK。詳しくやりたければ hello / loop トピックへ。

chapter 一覧

# chapter 内容 学習目標
1 ch01-create-array/ 配列を作る [1, 2, 3]array(1, 2, 3) の両方を読み書きできる
2 ch02-access-index/ 添字でアクセス $arr[0] で要素を取り出せる / 添字は 0 始まり
3 ch03-modify-array/ 配列を書き換える $arr[i] = X / $arr[] = X で更新・追加できる
4 ch04-array-functions/ 基本関数 count / array_sum / max / min を使える
5 ch05-for-array/ for で走査 全要素を 1 つずつ処理し、合計・最大を自前で書ける
6 ch06-string-to-array/ 文字列 → 配列 explode でカンマ・スペース区切り入力を扱える
7 ch07-array-to-string/ 配列 → 文字列 implode で任意の区切り文字で連結できる
8 ch08-array-manipulation/ 操作関数 array_push / pop / shift / unshift を使い分けられる

合計 8 chapter / 21 drill / 所要 2〜2.5 時間

進め方

  1. 各 chapter の slide.md を読む (4〜5 分)
  2. drill/ 配下の問題を順番に解く
  3. 採点: php scripts/grade.php topics/array-basic/<chapter>/drill/<drill>/

つまづきポイント

症状 多くの原因
Undefined offset / Undefined array key 存在しない添字にアクセスしている → count($arr) で範囲を確認
最後の要素が取れない $arr[count($arr)] ではなく $arr[count($arr) - 1]。0 始まりなので最後は count-1
print_r で何も出ない $arr が空配列か、変数名のタイポ → var_dump($arr) で確認
ループで配列が崩れる for の上限を固定値にしている / ループ内で要素を削除している
explode の結果が 1 要素しかない 区切り文字が一致していない (全角カンマ / スペースの数違いなど)
array_sum が 0 になる 配列の中身が文字列のまま → (int) でキャストしてから入れる

関連トピック

トピック 関係
hello このトピックの前提 (echo / 変数 / 入力)
loop このトピックの前提 (for ループ)
array-assoc キーで値を引く配列。本トピックと並列の関係
array-multi 配列の中に配列を入れて「表」を扱う
function 配列を引数で渡し、戻り値として配列を返す
db DB からの取得結果は配列で返ってくる

トピックを並列で参照する全体地図は TOPICS_INDEX.md にある。

案件 (dojo_map.tsv) での参照

topic_slug     chapter_dir
array-basic    topics/array-basic/ch01-create-array
array-basic    topics/array-basic/ch04-array-functions
array-basic    topics/array-basic/ch06-string-to-array
...

slug array-basic で参照可。04-array-basic / array-basic どちらの path でもアクセスできる (シンボリックリンク)。

このレッスンの章

  1. ch01 ch01 — 配列を作る
  2. ch02 ch02 — 添字でアクセス
  3. ch03 ch03 — 配列を書き換える
  4. ch04 ch04 — 配列の基本関数
  5. ch05 ch05 — for で配列を走査する
  6. ch06 ch06 — 文字列を配列に分割
  7. ch07 ch07 — 配列を文字列に連結
  8. ch08 ch08 — 配列の操作関数

スクール現場で詰まる「よくある落とし穴」

公式マニュアルには書かれていないけれど、講師として受講生がよくハマるポイントを並べました。

  1. array_push か $arr[] か

    1要素追加なら `$arr[] = $v;` が高速。複数追加なら `array_push($arr, $v1, $v2);` が読みやすい

  2. foreach で値が更新されない

    `foreach ($arr as $v) { $v++; }` は元の配列に反映されない。`foreach ($arr as &$v)` で参照渡しに

  3. 連想配列と添字配列の混同

    `array_values()` / `array_keys()` で意識的に取り出す。`json_encode` の出力が `[]` か `{}` か変わる原因にもなる