スコアボードを例に多次元構造を理解しよう [PHP入門]
配列を「階層構造」で考える
1 次元配列を使っていると、データのまとまりが複雑になる瞬間があります。
たとえば、バスケの 3on3 チームを 2 組管理する場合、単純に 1 つの配列に全員の名前を入れると、どこからが自チームでどこからが敵チームなのか分からなくなります。
$members = [
'佐藤さん', '田中さん', '加藤さん', // 自チーム
'金子さん', '山下さん', '藤原さん', // 敵チーム
];
これでは人数が変動したときに破綻します。
解決策は「配列の中に配列を入れる」こと。これが2次元配列です。
$members_by_team = [
['佐藤さん', '田中さん', '加藤さん'], // 自チーム
['金子さん', '山下さん', '藤原さん'], // 敵チーム
];
print_r() で出力すると、Array の中にさらに Array があり、データが階層的に整理されているのがわかります。
PHP の配列は柔軟で、こうした 「配列の中に配列」 という多次元構造を簡単に表現できます。
2 次元配列の基本アクセス
1 次元配列では $array[0] のように [ ] が 1 つでしたが、2 次元配列では [ ] が 2 つになります。
左の添字が「外側の配列(1次元)」、右が「内側の配列(2次元)」です。
echo $members_by_team[0][1]; // 田中さん
echo $members_by_team[1][0]; // 金子さん
echo $members_by_team[0] のように1つだけ指定すると、「配列をそのまま返す」ため、echo ではエラーになります。
この場合は var_dump() を使って中身を確認しましょう。
コアボードで考える2次元配列
実用例として「野球のスコアボード」を作ります。
2 チーム × 5 回の得点を管理するなら、2×5 の配列が最適です。
$score_board = [
[0, 0, 2, 0, 1],
[0, 1, 0, 1, 0],
];
print_r() で確認すると、チームごとに 5 回分の得点がまとめられているのが分かります。
この構造を使えば、スコアの集計や出力もシンプルにできます。
for 文で 2 次元配列を処理する
1 次元配列では次のように for 文で全要素を出力します。
$members = ['佐藤さん', '田中さん', '加藤さん'];
for ($i = 0; $i < count($members); $i++) {
echo $members[$i] . PHP_EOL;
}
では、2 次元配列なら?
単純に $members_by_team[$i] を echo すると「配列を文字列として出力できない」というエラーになります。
これは、1 次元目の要素が配列だからです。
$members_by_team[$i][$j] のように、内側の要素も指定する必要があります。
ここで使うのが for文のネスト(入れ子) です。
for ($i = 0; $i < count($members_by_team); $i++) {
for ($j = 0; $j < count($members_by_team[$i]); $j++) {
echo $members_by_team[$i][$j] . PHP_EOL;
}
}
外側のループがチーム(1 次元)、内側のループがメンバー(2 次元)を担当します。
こうすることで、すべての要素を順に取り出すことができます。
まとめ
- 1 次元配列では複雑なデータを扱うのは限界がある
- 配列の中に配列を入れて「2次元配列」にすれば、構造的に整理できる
- 添字は
[外側][内側]の順番で指定 - 出力には for の入れ子(ネスト)を活用する
このように、2 次元配列を理解すると「チームとメンバー」「クラスと生徒」「行と列」など、現実世界の構造をコードで自然に表現できるようになります。
本記事は弊社の次プログラミング教材の要約です。
PHP ファーストステップ講座 009 2次元配列
ほかにも FOR文・配列・条件分岐などを小ステップで練習できる教材も用意しています。
興味があればそちらも覗いてみてください。
イーエスファイン IT人材育成部の書籍
Discussion