サンプル・プログラムの実行例
ホームページに埋め込む場合に利用できるように、URLパラメータとして mode を指定することができる。gTimeTable?mode=1 のようにして実行すると、TABLEのみのHTML文を出力する。
画像は一切使用していないが、TABLEタグに対してスタイルシートを指定しており、これはホームページ側で適宜設定してほしい。
サンプル・プログラム
gengo.php | サンプル・プログラム本体 |
pahooNormalizeText.php | テキスト正規化クラス pahooNormalizeText。 テキスト正規化クラスの使い方は「PHPで日本語テキストを正規化」を参照。include_path が通ったディレクトリに配置すること。 |
解説:元号を表示しやすいように配列に格納する
 175: /**
 176: * 元号を表示しやすいように配列に格納する
 177: * @param array $eras 元号を格納する配列
 178: * @return int 格納した元号の数
 179: */
 180: function getEras2(&$eras) {
 181: //オブジェクト生成
 182: $pnt = new pahooNormalizeText();
 183:
 184: $table = array($pnt->TABLE_AD_ERA2, $pnt->TABLE_AD_ERA1);
 185: $cnt = 0;
 186: foreach ($table as $tbl) {
 187: foreach ($tbl as $key=>$val) {
 188: //開始年月日
 189: preg_match('/([0-9]{2})([0-9]{2})([0-9]{4})/', $key, $arr);
 190: $hh = (int)$arr[1]; //時に相当(西暦上2桁)
 191: $mm = (int)$arr[2]; //分に相当(西暦下2桁)
 192: $ss = (int)$arr[3]; //秒に相当(月日)
 193: $eras[$hh][$mm][$ss] = $val;
 194: $cnt++;
 195: }
 196: }
 197: //オブジェクト解放
 198: $pnt = NULL;
 199:
 200: return $cnt;
 201: }
1次元 | 2次元 | 3次元 | 内 容 |
---|---|---|---|
時に相当(西暦上2桁) | 分に相当(西暦下2桁) | 秒に相当(月日) | 元号 |
解説:時刻表を作成
 203: /**
 204: * 時刻表を作成
 205: * @param array $eras 元号配列
 206: * @return string 表示テキスト(HTML)
 207: */
 208: function gengoTimeTable($eras) {
 209: $caption1 = CAPTION1;
 210: $caption2 = CAPTION2;
 211: $html =<<< EOT
 212: <table class="titable">
 213: <caption>{$caption1}</caption>
 214: <tr><td colspan="2" class="index">{$caption2}</td></tr>
 215:
 216: EOT;
 217: foreach ($eras as $hh=>$arr1) {
 218: if ($hh > 29) continue;
 219: $html .= "<tr>\n<td class=\"hour\">{$hh}</td>\n<td>";
 220: foreach ($arr1 as $mm=>$arr2) {
 221: $m2 = sprintf("%02d", $mm);
 222: foreach ($arr2 as $val) {
 223: if (mb_strlen($val) == 0) continue;
 224: $html .= "<ruby>{$m2}<rt>{$val}</rt></ruby>\n";
 225: }
 226: }
 227: $html .= "\n</td>\n</tr>\n";
 228: }
 229: $html .= "</table>\n";
 230:
 231: return $html;
 232: }
ユーザー関数 gengoTimeTable は、これらを読み飛ばし、有効な元号をTABLEに並べてゆく。
参考情報
日本の大化から令和までの歴代元号を時刻表っぽくしてみました。 pic.twitter.com/RaUSfQ7Vbl
— オ(端) (@Y_Hayama01) May 2, 2019
参考サイト
- PHPで過去の元号を分析する:ぱふぅ家のホームページ
「PHPで過去の元号を分析する」に続き、今回は、大化(645年)から令和(2019年)までのすべての元号を、鉄道時刻表に並べて表示するPHPプログラムを作る。
南北朝時代については、南朝の元号を採用している。クラス pahooNormalizeText には北朝の元号がコメントアウトしてあるので、必要に応じて、南朝と切り替えてみてほしい。