採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

2 次元配列にアクセスする

テクノロジ系 / array-multi (多次元配列・オブジェクトリスト・CSV)

2 次元配列にアクセスする

Lesson 6 / Chapter 2

添字を 2 つ並べて取り出す

<?php
$table = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];
echo $table[0][0] . "\n";  // 1
echo $table[1][2] . "\n";  // 6
echo $table[2][1] . "\n";  // 8
  • $table[行][列] の順で書く
  • 1 つ目の添字 = 外側の配列 (どの行か)
  • 2 つ目の添字 = その行の中の何番目か

順を追って読む

$table[1][2]

これは:

  1. $table[1]1 行目の配列 [4, 5, 6] を取り出す
  2. その配列の [2] 番目、つまり 6 を取り出す

→ 添字は 外側から順に内側へ たどる。

四隅を取り出してみる

<?php
$table = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];
echo $table[0][0] . "\n";  // 左上 = 1
echo $table[0][2] . "\n";  // 右上 = 3
echo $table[2][0] . "\n";  // 左下 = 7
echo $table[2][2] . "\n";  // 右下 = 9

「行・列の番号 = 添字」をイメージしながら書く。

範囲外を指定すると null (警告)

<?php
$table = [
    [1, 2, 3],
    [4, 5, 6],
];
echo $table[5][0];   // Warning: Undefined array key 5
  • 存在しない添字を取ると null (PHP 8 では Warning も出る)
  • 「行数・列数」を意識して書くと事故が減る
  • count($table) で行数、count($table[0]) で列数 (1 行目基準)

このチャプターでできるようになること

$arr[行][列] で任意の要素を取り出せる

✅ 添字は外側 → 内側の順だと分かる

✅ 四隅・特定の行・特定の列を 1 個ずつ取り出せる

✅ 範囲外アクセスが起こる仕組みを知っている

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — 四隅を出力する

問題

次の 3×3 の 2 次元配列が与えられています。

$table = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

この配列の四隅 (左上 → 右上 → 左下 → 右下) を 1 行ずつ出力してください。

期待される出力:

1
3
7
9

採点

php scripts/grade.php topics/array-multi/ch02-2d-access/drill/01-corner/

ヒント

  • 左上 = $table[0][0]
  • 右上 = $table[0][2]
  • 左下 = $table[2][0]
  • 右下 = $table[2][2]

ドリル 02 — 1 行分を出力する

問題

次の 3×3 の 2 次元配列が与えられています。

$table = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

2 行目 (添字 1) の 3 要素を 1 行ずつ順に出力してください。

期待される出力:

4
5
6

採点

php scripts/grade.php topics/array-multi/ch02-2d-access/drill/02-row-print/

ヒント

  • 2 行目は添字 1
  • $table[1][0], $table[1][1], $table[1][2] を 1 行ずつ出力