PHPで2次元配列をTABLE表示

(1/1)
PHP でマッシュアップ・プログラムを作るときなど、データを 2 次元配列に入れてから処理することが多い。プログラムの動作検証をする際、その配列の内容を簡単に見ることができると便利だ。
そこで今回は、連想配列を含む 2 次元配列の内容を、HTML の TABLE タグとして表示するプログラムをつくることにする。

(2021 年 5 月 12 日)PHP8 対応,リファラ・チェック追加

サンプル・プログラムの実行例

PHPで2次元配列をTABLE表示

目次

サンプル・プログラム

このプログラムは、連想配列を含む 2 次元配列専用である。
圧縮ファイルの内容
array2table.phpサンプル・プログラム本体。

準備

0036: //TABLEの横幅(ピクセル)
0037: define('TABLE_WIDTH', 600);
0038: 
0039: //2次元配列
0040: $Items = array(
0041: array(
0042:     'year'     => 2015,
0043:     'month'     => 12,
0044:     'day'     => 27,
0045:     'weather' => '晴時々曇',
0046:     'max_temp' => 11,
0047:     'min_temp' => 5
0048: ), array(
0049:     'year'     => 2015,
0050:     'month'     => 12,
0051:     'day'     => 28,
0052:     'weather' => '晴時々曇',
0053:     'max_temp' => 9,
0054:     'min_temp' => 0
0055: ), array(
0056:     'year'     => 2015,
0057:     'month'     => 12,
0058:     'day'     => 29,
0059:     'weather' => '晴時々曇',
0060:     'max_temp' => 10,
0061:     'min_temp' => 3
0062: ), array(
0063:     'year'     => 2015,
0064:     'month'     => 12,
0065:     'day'     => 30,
0066:     'weather' => '',
0067:     'max_temp' => 9,
0068:     'min_temp' => 2
0069: ), array(
0070:     'year'     => 2015,
0071:     'month'     => 12,
0072:     'day'     => 31,
0073:     'weather' => '晴のち曇',
0074:     'max_temp' => 12,
0075:     'min_temp' => 3
0076: ), array(
0077:     'year'     => 2016,
0078:     'month'     => 1,
0079:     'day'     => 1,
0080:     'weather' => '',
0081:     'max_temp' => 11,
0082:     'min_temp' => 5
0083: ));

表示する TABLE の幅を定数 TABLE_WIDTH に、2 次元配列を $Items に用意する。

解説:TABLE変換

0164: /**
0165:  * 2次元配列をTABLE変換
0166:  * @param array $arr 2次元配列
0167:  * @return string HTMLコンテンツ/FALSE:エラー
0168: */
0169: function array2table($arr) {
0170:     if (!is_array($arr)) return FALSE;            //配列がない
0171:     $keys1 = array_keys($arr);                       //1次元目のキー取得
0172:     $keys2 = array_keys($arr[$keys1[0]]);            //2時限目のキー取得
0173:     if (is_array($arr[$keys1[0]][$keys2[0]]))   return FALSE;    //3次元以上
0174: 
0175:     $n = count($arr[$keys1[0]]) ;                //要素の数
0176:     $html = "<table class=\"array\">\n";
0177: 
0178:     //要素名
0179:     $html .= "<tr><th>Key</th>";
0180:     for ($i = 0; $i < $n$i++) {
0181:         $html .= "<th>{$keys2[$i]}</th>";
0182:     }
0183:     $html .= "</tr>\n";
0184: 
0185:     //配列本体
0186:     foreach ($arr as $key=>$arr1) {
0187:         $html .= "<tr><th>{$key}</th>";
0188:         for ($i = 0; $i < $n$i++) {
0189:             $html .= "<td>{$arr1[$keys2[$i]]}</td>";
0190:         }
0191:     }
0192:     $html .= "</tr>\n</table>\n";
0193: 
0194:     return $html;
0195: }

ユーザー関数 array2table は、2 次元配列を TABLE に変換するものだ。

最初に、引数として与えた 2 次元配列 $arr の属性をチェックする。
配列の内容が空だったり、3 次元以上の場合はエラーとして FALSE を返す。
また、要素名を組み込み関数  array_keys  を使って取り出しておく。

次に、1 次元目の要素を TABLE の並べる。
そして、配列本体を並べてゆく。

参考サイト

(この項おわり)
header