PHPの「配列」を学ぶと、次は「二次元配列」という概念が登場します。これは、一見すると少し複雑に感じるかもしれませんが、ユーザーリストや商品一覧など、実際のWebアプリケーション開発で頻繁に使われる、非常にパワフルなデータ構造です。
今回は、この二次元配列の基本的な仕組みと、そのデータをforeach
ループを使ってHTMLのテーブルに綺麗に表示する方法を、初心者の方にも分かりやすく解説します。
二次元配列とは? ~配列の中に配列を入れる~
二次元配列とは、その名の通り「配列の要素が、さらに配列になっている」配列のことです。
Excelのような表計算ソフトをイメージすると非常に分かりやすいです。
- 二次元配列全体 → シート全体
- 外側の配列の各要素 → 表の各「行」
- 内側の配列の各要素 → 行の中の各「セル」
例えば、複数のユーザー情報を管理したい場合を考えてみましょう。一人のユーザー情報は「名前」「趣味」「メールアドレス」といったデータを持つ連想配列で表現できます。そして、その連想配列を複数まとめて、一つの配列に入れたものが二次元配列です。
二次元配列の作り方
<?php
// 複数のユーザー情報を格納した二次元配列
$users = [
[
"name" => "Taro Sato",
"hobby" => "Movie",
"email" => "sato@example.com"
],
[
"name" => "Jiro Suzuki",
"hobby" => "Programming",
"email" => "suzuki@example.com"
],
[
"name" => "Saburo Takahashi",
"hobby" => "Reading",
"email" => "takahashi@example.com"
]
];
// 2番目のユーザー(キーは1)の、名前(キーは'name')を取り出す
echo $users[1]["name"]; // 出力: Jiro Suzuki
このように、$配列[行番号][列名]
のような形で、特定のデータにアクセスすることができます。
foreach
で二次元配列をHTMLテーブルに表示する
二次元配列の最大の利点は、foreach
ループと組み合わせることで、大量のデータを効率的に処理できる点にあります。ここでは、先ほどの$users
配列の中身をHTMLの<table>
タグを使って一覧表示してみましょう。
【処理の流れ】
- HTMLで
<table>
タグと見出し行(<th>
)を用意する。 foreach
で外側の配列($users
)をループさせる。ループの各周で、内側の配列(各ユーザーの情報)が一つずつ取り出される。- 取り出した内側の配列(
$user
)から、キーを使って「名前」や「趣味」の値を取得する。 - 取得した値を
<td>
タグに入れて、テーブルの行(<tr>
)を生成する。
完成版サンプルコード
<?php
// 複数のユーザー情報を格納した二次元配列
$users = [
[
"id" => 1,
"name" => "Taro Sato",
"hobby" => "Movie",
"email" => "sato@example.com"
],
[
"id" => 2,
"name" => "Jiro Suzuki",
"hobby" => "Programming",
"email" => "suzuki@example.com"
],
[
"id" => 3,
"name" => "Saburo Takahashi",
"hobby" => "Reading",
"email" => "takahashi@example.com"
]
];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ユーザーリスト</title>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ccc; padding: 10px; text-align: left; }
thead { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>ユーザーリスト</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>趣味</th>
<th>メールアドレス</th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo htmlspecialchars($user["id"], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlspecialchars($user["name"], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlspecialchars($user["hobby"], ENT_QUOTES, 'UTF-8'); ?></td>
<td><?php echo htmlspecialchars($user["email"], ENT_QUOTES, 'UTF-8'); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>
foreach ($users as $user)
の部分で、$users
配列からユーザー情報(内側の連想配列)が一つずつ$user
変数に代入されます。ループの中では、その$user
配列から$user["name"]
のようにして値を取り出し、<td>
タグの中に表示しています。
セキュリティのポイント データベースなど外部から取得したデータをHTMLに出力する際は、
htmlspecialchars()
関数を使ってエスケープ処理を行うのが基本です。これにより、悪意のあるスクリプトが埋め込まれるXSS(クロスサイトスクリプティング)攻撃を防ぐことができます。
まとめ
今回は、二次元配列の概念と、それをforeach
ループで処理してHTMLのテーブルとして表示する実践的な方法を学びました。
【ポイントの振り返り】
- 二次元配列は「配列の配列」であり、表形式のデータを管理するのに最適。
$配列[行のキー][列のキー]
の形で特定のデータにアクセスできる。foreach
ループと組み合わせることで、二次元配列のデータを効率的に一覧表示できる。
この「二次元配列をforeach
でループさせてHTMLを生成する」というパターンは、PHPで動的なWebサイトを構築する上で最も頻繁に使うテクニックの一つです。ぜひマスターして、さまざまなデータの表示に応用してみてください。