配列の基本
添字配列の作成・取得・要素追加
複数の値を 1 つの変数にまとめる「添字配列 (indexed array)」を扱うトピック。作成・アクセス・書き換え・走査・関数まで一通り押さえる。
このトピックで身につくこと
[1, 2, 3]のような添字配列を作って読み書きできるcount/array_sum/max/minなどの基本関数を使えるforで配列を走査して合計・最大などを自前で求められるexplodeでカンマ区切り入力を配列に、implodeで配列を文字列にできるarray_push/pop/shift/unshiftを使い分けられる
前提知識の要点
このトピックは hello の echo / 変数 / 入力と、loop の for ループを前提にする。要点だけ:
<?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)| やりたいこと | 書き方 |
|---|---|
| 画面に出す | 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 時間。
進め方
- 各 chapter の
slide.mdを読む (4〜5 分) drill/配下の問題を順番に解く- 採点:
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 でもアクセスできる (シンボリックリンク)。
このレッスンの章
スクール現場で詰まる「よくある落とし穴」
公式マニュアルには書かれていないけれど、講師として受講生がよくハマるポイントを並べました。
-
array_push か $arr[] か
1要素追加なら `$arr[] = $v;` が高速。複数追加なら `array_push($arr, $v1, $v2);` が読みやすい
-
foreach で値が更新されない
`foreach ($arr as $v) { $v++; }` は元の配列に反映されない。`foreach ($arr as &$v)` で参照渡しに
-
連想配列と添字配列の混同
`array_values()` / `array_keys()` で意識的に取り出す。`json_encode` の出力が `[]` か `{}` か変わる原因にもなる