Menu

PHPの多次元配列:二次元配列とforeachでのループ

PHPの多次元配列は、要素が配列である配列で、階層ごとに角括弧を1つずつ付けて読みます:$grid[1][2]や$users[0]['name']。ネストした配列の作り方、深い値の読み書き、ネストしたforeachでのループ、HTMLの表の作成、列の取り出し、行の並べ替えを学びます。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

多次元配列とは、要素が配列である配列です。階層ごとに角括弧を1組ずつ付けて読みます。$grid[1][2]は1行目の2列目、$users[0]['name']は最初のレコードの名前です。

2つ目の形、つまり名前付きのフィールドを持つレコードのリストが、いちばんよく出会う形です。データベースのクエリ、デコードしたJSONのレスポンス、解析したCSVファイルは、たいていこの形で返ってきます。各レコードは連想配列です。

ネストした配列を作る

ネストは必要なだけ深くでき、階層ごとに数値のキーと文字列のキーを混ぜられます。設定の配列はよくある例で、名前付きのセクションがそれぞれ設定やリストを持ちます。

行とネストした値を追加する

$rows[] = [...]は行全体を追加します。$arr['key'][] = $valueはネストしたリストの中に追加し、PHPは最初のときに内側の配列を作るので、値のグループ分けに準備は要りません。

多次元配列をループする

階層ごとにforeachを1つ使います。レコードのリストなら、フィールドを名前で読むので、たいていループは1つで十分です。グリッドなら、内側のループが各行のセルを順に処理します。

配列からHTMLの表を作る

行の配列はそのままHTMLの表に対応します。最初の行のキーが見出しになり、各行が<tr>になります。実行するとPageタブに描画された表が表示されます。値を変えたり行を足したりして、もう一度実行してみてください。

foreach (...): ... endforeach;の形はテンプレート向けに書いた同じループなので、HTMLが読みやすく保たれます。

すべての行から1つの列を取り出す

array_column()は、すべての行から1つのフィールドを取り出して平らなリストにします。3つ目の引数を渡すと別のフィールドを結果のキーにでき、レコードのリストが検索用の表になります。

フィールドで行を並べ替える

usort()は比較関数で行を並べ替えます。宇宙船演算子<=>は-1、0、1を返し、これはusort()が期待するものそのものです。降順にするには$aと$bを入れ替えます。

count($players, COUNT_RECURSIVE)は3つの行とその中の6つのフィールドを数えるので、9と表示されます。

よくあるミス:存在しないかもしれない深いキーを読む

cacheキーがないのに$config['cache']['ttl']を読むと、Warning: Undefined array key "cache"が表示され、次の階層でWarning: Trying to access array offset on nullが続きます。??演算子は連鎖全体を一度に確認し、決して警告を出さないので、任意のネストした値を読む安全な方法です。

よくある質問

PHPの多次元配列の値にアクセスするには?

階層ごとに角括弧を1組ずつ付けます:$matrix[1][0]は1行目の0列目、$users[0]['email']は最初のユーザーのメールアドレスです。各角括弧は、直前の角括弧が返した配列から読みます。

PHPで多次元配列をループするには?

階層ごとにforeachを1つずつネストします:foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }。レコードの配列なら、たいていループは1つで、フィールドを名前で読みます:$row['name']。

多次元配列に要素を追加するには?

行全体を追加するなら$rows[] = ['name' => 'Linus', 'age' => 54];、ネストした配列の中に追加するなら$groups['admins'][] = 'Grace';です。キーがまだなければ、PHPが内側の配列を作ります。

PHPで0で埋めた二次元配列を作るには?

array_fill()を2つネストします:$grid = array_fill(0, 3, array_fill(0, 4, 0));で、0が4つ並んだ行が3行できます。各行は別々のコピーなので、$grid[0][0] = 5;で変わるのは最初の行だけです。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める