PHPでCOVID-19情報をグラフ表示

(1/1)
2019 年(平成 31 年)末頃より新型コロナウイルス感染症(COVID-19)が、中国の武漢市を中心に出現した。WHO の発表によると、2020 年(令和 2 年)4 月 16 日現在、世界の患者数は約 199 万人、死亡者数は約 13 万人に達した。
今回は、国内の COVID-19 感染の推移を、最新のデータを読み込んでグラフ表示する PHP プログラムを作ってみることにする。

本プログラムで参照するデータは、東洋経済オンライン編集部の荻原和樹さんが「新型コロナウイルス国内感染の状況」(MIT ライセンス)として公開しているもの、および、jig.jp 創業者&会長の福野泰介さんが「新型コロナウイルス対策ダッシュボード」として公開しているものをマッシュアップした。

(2020 年 6 月 1 日)データ形式変更に対応。
(2020 年 5 月 17 日)データ形式変更に対応。
(2020 年 5 月 3 日)患者数-退院者数(累計)を表示。
(2020 年 4 月 26 日)現在の入院患者数、感染症ベッド数表示。
(2020 年 4 月 25 日)PCR 検査数,移動平均を追加。都道府県別のグラフを表示。
(2020 年 4 月 24 日)データ形式変更に対応。

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

PHPでCOVID-19情報をグラフ表示

目次

サンプル・プログラム

圧縮ファイルの内容
viewCOVID-19.phpサンプル・プログラム本体
pahooStat.php統計に関わるクラス pahooStat。
使い方は「PHPで太陽黒点相対数の周期変化を描く」を参照。

準備:初期値

0023: //リリース・フラグ(公開時にはTRUEにすること)
0024: define('FLAG_RELEASE', TRUE);
0025: 
0026: //リファラ・チェック(直リン防止用;空文字ならチェックしない)
0027: define('REFER_ON', 'www.pahoo.org');
0028: //define('REFER_ON', '');
0029: 
0030: //移動平均区間;日
0031: define('INTERVAL', 10);
0032: 
0033: //グラフの表示幅・高さ(単位:ピクセル)
0034: define('WIDTH',  600);
0035: define('HEIGHT', 400);
0036: 
0037: //グラフの色
0038: define('COLOR_COVID', '#88CCFF');
0039: define('COLOR_MEAN',  '#CC0000');
0040: 
0041: //jqPlotのあるフォルダ
0042: define('JQPLOT', '../../../../common/jqplot/');
0043: 
0044: //データファイル名
0045: define('DATA_FILE1', 'https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/data.json');                     //グラフ描画情報
0046: define('DATA_FILE_BEDS1', 'https://raw.githubusercontent.com/code4sabae/covid19/master/data/bedforinfection_current.json'); //感染症ベッド数
0047: define('DATA_FILE_BEDS2', 'https://raw.githubusercontent.com/code4sabae/covid19/master/data/bedforinfection_summary.json'); //感染症ベッド数
0048: define('DATA_FILE_NP1', 'https://raw.githubusercontent.com/code4sabae/covid19/master/data/covid19japan-fast.json');         //現在の入院患者数
0049: define('DATA_FILE_NP2', 'https://raw.githubusercontent.com/code4sabae/covid19/master/data/covid19japan-all.json');         //現在の入院患者数

上記の初期値は任意に変更が可能である。

グラフ描画のために、「PHP で NHK 政治意識月例調査をグラフ表示」で紹介したjQuery のプラグイン jqPlot を用いた。プラグインをダウンロードしたら解凍して、そのパスを定数 JQPLOT に定義する。

参照データは、東洋経済オンライン編集部の荻原和樹さんが「新型コロナウイルス国内感染の状況」として公開しているもの、および、jig.jp 創業者&会長の福野泰介さんが「新型コロナウイルス対策ダッシュボード」として公開しているもので、いずれもデータ本体 GitHub に JSON や CSV 形式で格納している。

解説:データ・ファイルを読み込む

0220: /**
0221:  * データ・ファイルを読み込む、COVID-19グラフ描画情報を取得
0222:  * @param string $fname 入力ファイル名
0223:  * @param array  $data  データ格納配列
0224:  * @return bool TRUE/FALSE
0225: */
0226: function readDataFile($fname, &$data) {
0227:     global $TablePref;
0228: 
0229:     //データ読み込み
0230:     $contents = file_get_contents($fname);
0231:     if ($contents == FALSE)     return FALSE;
0232:     $data = json_decode($contentsTRUE);
0233: 
0234:     //都道府県テーブル作成
0235:     foreach ($data['prefectures-map'] as $key=>$arr) {
0236:         $code = $arr['code'];
0237:         $TablePref[$code]['en'] = $arr['en'];
0238:         $TablePref[$code]['ja'] = $arr['ja'];
0239:     }
0240: 
0241:     return TRUE;
0242: }

COVID-19 グラフ描画を GitHub のファイルから読み込み、組み込み関数  json_decode  によって配列に展開する。
また、後述するベッド数や患者数を集計するために、都道府県名をグローバル変数 $TablePref に格納する。

0244: /**
0245:  * データ・ファイルを読み込み、現在の都道府県別ベッド数を取得
0246:  * @param array  $items 都道府県別ベッド数格納用
0247:  * @return int 全国ベッド数/FALSE
0248: */
0249: function readBeds(&$items) {
0250:     global $TablePref;
0251: 
0252:     //データファイル(その1)
0253:     $contents = file_get_contents(DATA_FILE_BEDS1);
0254:     if ($contents == FALSE)     return FALSE;
0255:     $data = json_decode($contentsTRUE);
0256:     $cnt = 0;
0257:     foreach ($data as $key=>$arr) {
0258:         if (isset($arr['自治体名']) && isset($arr['新型コロナウイルス対策感染症病床数']) && isset($arr['発表日'])) {
0259:             $pref = $arr['自治体名'];
0260:             $yyyymmdd = $arr['発表日'];
0261:             //新規登録
0262:             if (! isset($items[$pref])) {
0263:                 $items[$pref]['date'] = $yyyymmdd;
0264:                 $items[$pref]['val']  = (int)$arr['新型コロナウイルス対策感染症病床数'];
0265:             } else if ($yyyymmdd > $items[$pref]['date']) {
0266:                 $items[$pref]['date'] = $yyyymmdd;
0267:                 $items[$pref]['val']  = (int)$arr['新型コロナウイルス対策感染症病床数'];
0268:             }
0269:         }
0270:     }
0271: 
0272:     //データファイル(その2)
0273:     $contents = file_get_contents(DATA_FILE_BEDS2);
0274:     if ($contents == FALSE)     return FALSE;
0275:     $data = json_decode($contentsTRUE);
0276:     $cnt = 0;
0277:     foreach ($TablePref as $code=>$arr1) {
0278:         if (! isset($items[$arr1['ja']])) {
0279:             foreach ($data['area'] as $key=>$arr2) {
0280:                 if ($arr2['name_ja'] == $arr1['ja']) {
0281:                     $items[$arr1['ja']]['val'] = $arr2['sum'];
0282:                     break;
0283:                 }
0284:             }
0285:         }
0286:     }
0287: 
0288:     //合計
0289:     $cnt = 0;
0290:     foreach ($items as $arr)    $cnt += $arr['val'];
0291: 
0292:     return $cnt;
0293: }

現在の都道府県別ベッド数を GitHub の 2 つのファイルから読み込み、組み込み関数  json_decode  によって配列に展開する。

0295: /**
0296:  * データ・ファイルを読み込み、現在の都道府県別入院患者数を取得
0297:  * @param array  $items 都道府県別入院患者数格納用
0298:  * @return int 全国入院患者数/FALSE
0299: */
0300: function readNP(&$items) {
0301:     global $TablePref;
0302: 
0303:     //データファイル(その1)
0304:     $contents = file_get_contents(DATA_FILE_NP1);
0305:     if ($contents == FALSE)     return FALSE;
0306:     $data = json_decode($contentsTRUE);
0307:     $cnt = 0;
0308:     foreach ($data as $key=>$arr) {
0309:         if (isset($arr['name']) && isset($arr['ncurrentpatients']) && isset($arr['lastUpdate'])) {
0310:             $pref = $arr['name'];
0311:             $yyyymmdd = $arr['lastUpdate'];
0312:             //新規登録
0313:             if (! isset($items[$pref])) {
0314:                 $items[$pref]['date'] = $yyyymmdd;
0315:                 $items[$pref]['val']  = (int)$arr['ncurrentpatients'];
0316:             } else if ($yyyymmdd > $items[$pref]['date']) {
0317:                 $items[$pref]['date'] = $yyyymmdd;
0318:                 $items[$pref]['val']  = (int)$arr['ncurrentpatients'];
0319:             }
0320:         }
0321:     }
0322: 
0323:     //データファイル(その2)
0324:     $contents = file_get_contents(DATA_FILE_NP2);
0325:     if ($contents == FALSE)     return FALSE;
0326:     $data = json_decode($contentsTRUE);
0327:     $cnt = 0;
0328:     foreach ($TablePref as $code=>$arr1) {
0329:         if (! isset($items[$arr1['ja']])) {
0330:             foreach ($data as $key=>$arr2) {
0331:                 if (preg_match('/現在は入院/ui', $arr2['description']) > 0) {
0332:                     foreach ($arr2['area'] as $key=>$arr3) {
0333:                         if ($arr3['name'] == $arr1['en']) {
0334:                             if (! isset($items[$arr1['en']]['val'])) {
0335:                                 $items[$arr1['en']]['val'] = $arr3['ncurrentpatients'];
0336:                             }
0337:                             break;
0338:                         }
0339:                     }
0340:                     break;
0341:                 }
0342:             }
0343:         }
0344:     }
0345: 
0346:     //合計
0347:     $cnt = 0;
0348:     foreach ($items as $arr)    $cnt += $arr['val'];
0349: 
0350:     return $cnt;
0351: }

現在の都道府県別入院患者数を GitHub の 2 つのファイルから読み込み、組み込み関数  json_decode  によって配列に展開する。

解説:感染者数(累計)を計算

0353: /**
0354:  * 感染者数(累計)を計算
0355:  * @param array $data データ配列
0356:  * @param int   $code  都道府県コード(0は全国)
0357:  * @return array 計算結果
0358: */
0359: function total_carriers($data$code) {
0360:     $items = array();
0361:     $cnt = 0;
0362:     //都道府県
0363:     if (($code >= 1) && ($code <= 47)) {
0364:         $sour = $data['prefectures-data']['carriers'];
0365:         $ofst = $code - 1;
0366:     //全国
0367:     } else {
0368:         $sour = $data['transition']['carriers'];
0369:         $ofst = 0;
0370:     }
0371:     //開始日
0372:     $ti = mktime(0, 0, 0, $sour['from'][1], $sour['from'][2], $sour['from'][0]);
0373:     //感染者数
0374:     foreach ($sour['values'] as $key=>$arr) {
0375:         $items[$cnt]['val']   = (int)$sour['values'][$key][$ofst];
0376:         $items[$cnt]['year']  = (int)date('Y', $ti);
0377:         $items[$cnt]['month'] = (int)date('m', $ti);
0378:         $items[$cnt]['day']   = (int)date('d', $ti);
0379:         $cnt++;
0380:         $ti = strtotime('+1 day', $ti);
0381:     }
0382: 
0383:     return $items;
0384: }

データ・ファイルには、日々の感染者数の累計が記録されている。これをグラフ描画しやすいように、配列 $items へ格納してゆく。

解説:新規感染者数を計算

0386: /**
0387:  * 新規感染者数を計算
0388:  * @param array $data  データ配列
0389:  * @param int   $code  都道府県コード(0は全国)
0390:  * @return array 計算結果
0391: */
0392: function diff_carriers($data$code=0) {
0393:     $items = array();
0394:     $cnt = 0;
0395:     //都道府県
0396:     if (($code >= 1) && ($code <= 47)) {
0397:         $sour = $data['prefectures-data']['carriers'];
0398:         $ofst = $code - 1;
0399:     //全国
0400:     } else {
0401:         $sour = $data['transition']['carriers'];
0402:         $ofst = 0;
0403:     }
0404:     //開始日
0405:     $ti = mktime(0, 0, 0, $sour['from'][1], $sour['from'][2], $sour['from'][0]);
0406:     //感染者数
0407:     foreach ($sour['values'] as $key=>$arr) {
0408:         //初日
0409:         if ($key - 1 < 0) {
0410:             $items[$cnt]['val'] = (int)$sour['values'][$key][$ofst];
0411:         //2日目以降
0412:         } else {
0413:             $items[$cnt]['val'] = (int)$sour['values'][$key][$ofst] - (int)$sour['values'][$key - 1][$ofst];
0414:         }
0415:         $items[$cnt]['year']  = (int)date('Y', $ti);
0416:         $items[$cnt]['month'] = (int)date('m', $ti);
0417:         $items[$cnt]['day']   = (int)date('d', $ti);
0418:         $cnt++;
0419:         $ti = strtotime('+1 day', $ti);
0420:     }
0421: 
0422:     return $items;
0423: }

データ・ファイルには、日々の感染者数の累計が記録されている。そこで、当日の感染者数から前日の感染者数を減算することで、増加数を求めることができる。

解説:PCR検査数を計算

0425: /**
0426:  * PCR検査数を計算
0427:  * @param array $data  データ配列
0428:  * @param int   $code  都道府県コード(0は全国)
0429:  * @return array 計算結果
0430: */
0431: function PCRtested($data$code=0) {
0432:     $items = array();
0433:     $cnt = 0;
0434:     //都道府県
0435:     if (($code >= 1) && ($code <= 47)) {
0436:         $sour = $data['prefectures-data']['pcrtested'];
0437:         $ofst = $code - 1;
0438:     //全国
0439:     } else {
0440:         $sour = $data['transition']['pcrtested'];
0441:         $ofst = 0;
0442:     }
0443:     //開始日
0444:     $ti = mktime(0, 0, 0, $sour['from'][1], $sour['from'][2], $sour['from'][0]);
0445:     //PCR検査件数
0446:     foreach ($sour['values'] as $key=>$arr) {
0447:         //初日
0448:         if ($key - 1 < 0) {
0449:             $items[$cnt]['val'] = (int)$sour['values'][$key][$ofst];
0450:         //2日目以降
0451:         } else {
0452:             $items[$cnt]['val'] = (int)$sour['values'][$key][$ofst] - (int)$sour['values'][$key - 1][$ofst];
0453:         }
0454:         $items[$cnt]['year']  = (int)date('Y', $ti);
0455:         $items[$cnt]['month'] = (int)date('m', $ti);
0456:         $items[$cnt]['day']   = (int)date('d', $ti);
0457:         $cnt++;
0458:         $ti = strtotime('+1 day', $ti);
0459:     }
0460: 
0461:     return $items;
0462: }

データ・ファイルには、日々の PCR 検査数の累計が記録されている。そこで、当日の検査数から前日の検査数を減算することで、その日の検査数を求めることができる。

解説:PCR陽性率(日次)を計算

0464: /**
0465:  * PCR陽性率(日次)を計算
0466:  * @param array $data  データ配列
0467:  * @param int   $code  都道府県コード(0は全国)
0468:  * @return array 計算結果
0469: */
0470: function rate_PCRtested($data$code=0) {
0471:     $items = array();
0472:     $cnt = 0;
0473:     //都道府県
0474:     if (($code >= 1) && ($code <= 47)) {
0475:         $sour1 = $data['prefectures-data']['carriers'];
0476:         $sour2 = $data['prefectures-data']['pcrtested'];
0477:         $ofst = $code - 1;
0478:     //全国
0479:     } else {
0480:         $sour1 = $data['transition']['carriers'];
0481:         $sour2 = $data['transition']['pcrtested'];
0482:         $ofst = 0;
0483:     }
0484:     //開始日
0485:     $ti1 = mktime(0, 0, 0, $sour1['from'][1], $sour1['from'][2], $sour1['from'][0]);
0486: 
0487:     //感染者数
0488:     foreach ($sour1['values'] as $key1=>$arr1) {
0489:         //PCR検査件数
0490:         $ti2 = mktime(0, 0, 0, $sour2['from'][1], $sour2['from'][2], $sour2['from'][0]);
0491:         foreach ($sour2['values'] as $key2=>$arr2) {
0492:             //感染者数とPCR検査件数の日付を合わせる
0493:             if ($ti1 == $ti2) {
0494:                 //初日
0495:                 if (($key1 - 1 < 0) || ($key2 - 1 < 0)) {
0496:                     if ($sour2['values'][$key1][$ofst] == 0) {
0497:                         $items[$cnt]['val'] = 0.0;
0498:                     } else {
0499:                         $items[$cnt]['val'] = $sour1['values'][$key1][$ofst] / $sour2['values'][$key1][$ofst] * 100.0;
0500:                     }
0501:                 //2日目以降
0502:                 } else {
0503:                     if (($sour2['values'][$key2][$ofst] - $sour2['values'][$key2 - 1][$ofst] == 0)) {
0504:                         $items[$cnt]['val'] = 0.0;
0505:                     } else {
0506:                         $items[$cnt]['val'] = ($sour1['values'][$key1][$ofst] - $sour1['values'][$key1 - 1][$ofst]) / ($sour2['values'][$key2][$ofst] - $sour2['values'][$key2 - 1][$ofst]) * 100.0;
0507:                     }
0508:                 }
0509:                 $items[$cnt]['year']  = (int)date('Y', $ti1);
0510:                 $items[$cnt]['month'] = (int)date('m', $ti1);
0511:                 $items[$cnt]['day']   = (int)date('d', $ti1);
0512:                 $cnt++;
0513:                 break;
0514:             }
0515:             $ti2 = strtotime('+1 day', $ti2);
0516:         }
0517:         $ti1 = strtotime('+1 day', $ti1);
0518:     }
0519: 
0520:     return $items;
0521: }

データ・ファイルには、日々の PCR 検査数の累計と、検査陽性者数の累計が記録されている。そこで、当日と前日の差分を取り、割り算することで、陽性率を求めることができる。

解説:現在の患者数を計算

0523: /**
0524:  * 現在の患者数を計算
0525:  * @param array $data データ配列
0526:  * @param int   $code  都道府県コード(0は全国)
0527:  * @return array 計算結果
0528: */
0529: function last_cases($data$code) {
0530:     $items = array();
0531:     $cnt = 0;
0532:     //全国
0533:     $sour = $data['transition']['cases'];
0534:     $ofst = 0;
0535:     //開始日
0536:     $ti = mktime(0, 0, 0, $sour['from'][1], $sour['from'][2], $sour['from'][0]);
0537: 
0538:     //患者数
0539:     foreach ($sour['values'] as $key=>$arr) {
0540:         $items[$cnt]['val']   = (int)$sour['values'][$key][$ofst];
0541:         $items[$cnt]['year']  = (int)date('Y', $ti);
0542:         $items[$cnt]['month'] = (int)date('m', $ti);
0543:         $items[$cnt]['day']   = (int)date('d', $ti);
0544:         $cnt++;
0545:         $ti = strtotime('+1 day', $ti);
0546:     }
0547: 
0548:     return $items;
0549: }

データ・ファイルには、日々の患者数が記録されている。このデータは全国のみとなっている。

解説:jqPlot用のスクリプト

0551: /**
0552:  * jqPlot用のスクリプト
0553:  * @param array  $items データ配列
0554:  * @param string $pref  都道府県名
0555:  * @param string $title グラフのタイトル
0556:  * @param bool   $log   TRUE:縦軸は対数/FALSE:通常(省略時)
0557:  * @return string スクリプト
0558: */
0559: function plot($items$pref='', $title$log=FALSE) {
0560:     //グラフの色
0561:     $color_covid = COLOR_COVID;
0562:     $color_mean  = COLOR_MEAN;
0563:     //移動平均を求める区間(日)
0564:     $interval = INTERVAL;
0565: 
0566:     //移動平均
0567:     $x = array();
0568:     $y = array();
0569:     foreach ($items as $key=>$val)  $x[$key] = $val['val'];
0570:     //統計オブジェクト
0571:     $pst = new pahooStat();
0572:     $pst->simple_moving_average(INTERVAL$x$y);        //移動平均
0573:     $pst = NULL;
0574:     foreach ($y as $key=>$val)  $items[$key]['mean'] = $val;
0575: 
0576:     $series = '';
0577:     $xmin = '';
0578:     $xmax = '';
0579:     $rendere_yaxis = $log ? 'renderer: $.jqplot.LogAxisRenderer' : 'min: 0';
0580: 
0581:     //系列の生成
0582:     $cnt = 0;
0583:     $s1 = $s2 = '';
0584:     foreach ($items as $key=>$val) {
0585:         $xmax = sprintf("%04d-%02d-%02d", $val['year'], $val['month'], $val['day']);
0586:         if ($key == 0)  $xmin = $xmax;
0587:         $s1 .= isset($val['val']) ? sprintf("['%s', %.3f],", $xmax$val['val']) : '';
0588:         $s2 .= isset($val['mean']) ? sprintf("['%s', %.3f],", $xmax$val['mean']) : '';
0589:         $cnt++;
0590:     }
0591:     $barwidth = (int)(WIDTH / $cnt * 0.7);
0592: 
0593: $js =<<< EOD
0594: jQuery(function() {
0595:     jQuery.jqplot('jqPlot_polls',
0596:     [
0597:         [ {$s1} ],
0598:         [ {$s2} ]
0599:     ],
0600:     {
0601:         //タイトル
0602:         title: {
0603:             text: '{$pref}の{$title}',
0604:             show: true,
0605:             fontFamily: 'serif',
0606:             fontSize: '20px',
0607:             textAlign: 'center',
0608:             textColor: 'black',
0609:         },
0610:         //系列
0611:         series: [
0612:         {
0613:             label: '{$title}',
0614:             color: '{$color_covid}',
0615:             renderer: jQuery . jqplot . BarRenderer,
0616:             rendererOptions: {
0617:                 barWidth: {$barwidth},
0618:                 shadowOffset: 0
0619:             }
0620:         },
0621:         {
0622:             label: '{$interval}日移動平均',
0623:             color: '{$color_mean}'
0624:         },
0625:         ],
0626:         legend: {
0627:             show: true,
0628:             placement: 'inside',
0629:             location: 'nw',
0630:             renderer: $.jqplot.EnhancedLegendRenderer,
0631:             rendererOptions: { numberRows: 1 }
0632:         },
0633:         seriesDefaults: {
0634:             showLine: true,
0635:             rendererOptions: { smooth: false },
0636:             markerOptions: { size: 0 },
0637:         },
0638:         //軸
0639:         axes: {
0640:             xaxis: {
0641:                 renderer:$.jqplot.DateAxisRenderer,
0642:                 tickOptions: { formatString: '%m/%d' },
0643:                 label: '日付',
0644:                 min: '{$xmin}',
0645:                 max: '{$xmax}',
0646:             },
0647:             yaxis: {
0648:                 {$rendere_yaxis},
0649:                 labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
0650:                 label: '{$title}',
0651:                 tickOptions: {
0652:                     formatString: "%'d",
0653:                     angle: -30,
0654:                 }
0655:             }
0656:         },
0657:         //ハイライター
0658:         highlighter: {
0659:             show: true,
0660:             showMarker: true,
0661:             tooltipLocation: 'sw',
0662:             fadeTooltip: false,
0663:             bringSeriesToFront: true,
0664:             tooltipAxes: 'xy',
0665:             formatString: '%s<br />%s'
0666:         }
0667:     }
0668:     );
0669: });
0670: 
0671: EOD;
0672: 
0673:     return $js;
0674: }

データ配列を与え、jqPlot 用のスクリプトを生成する。
感染者数(累計)を表示するときなどには、「指数関数的に増えている」という話を見やすくするために、縦軸を対数軸にできるようにしている。

実数を棒グラフで、移動平均を折れ線グラフで表示する。
移動平均については、「PHP で太陽黒点相対数の周期変化を描く」で紹介したとおりである。

解説:データ読み込み~グラフ描画

0737:     //処理選択ラジオボタン
0738:     $str_radio = '';
0739:     $i = 1;
0740:     foreach ($SelectFuncs as $key=>$val) {
0741:         $str_radio .= "<input type=\"radio\" name=\"func\" value=\"{$key}\" {$val['checked']} />{$val['title']} ";
0742:         if ($i % 3 == 0)    $str_radio .= '<br />';
0743:         $i++;
0744:     }
0745: 
0746:     //データ読み込み
0747:     $data = array();
0748:     $items = array();
0749:     readDataFile(DATA_FILE1$data);
0750:     if ($func == 'last_cases') {
0751:         $data['prefectures-map'] = NULL;
0752:     }
0753: 
0754:     //感染症ベッド数
0755:     $beds = array();
0756:     $beds_total = readBeds($beds);
0757:     $bed = ($pref == 0) ? $beds_total : $beds[$TablePref[$pref]['ja']]['val'];
0758:     $bed = number_format($bed);
0759: 
0760:     //入院患者数
0761:     $nps = array();
0762:     $nps_total = readNP($nps);
0763:     $np = ($pref == 0) ? $nps_total : $nps[$TablePref[$pref]['en']]['val'];
0764:     $np = number_format($np);
0765: 
0766:     //グラフ描画
0767:     if ($res == '') {
0768:         $selector = makeSelector($data$pref);
0769:         $items = $func($data$pref);
0770:         $flag = TRUE;
0771:         if ($flag) {
0772:             //jqPlot
0773:             $js = plot($itemsgetPref($data$pref), $SelectFuncs[$func]['title'], $SelectFuncs[$func]['log']);
0774: $res =<<< EOD
0775: <script>
0776: {$js}
0777: </script>
0778: <div id="jqPlot_polls" style="margin-top:20px; width:{$width}px; height:{$height}px;"></div>
0779: <p>現在の入院患者数:{$np}人 感染症ベッド数:{$bed}床</p>
0780: 
0781: EOD;

前述のユーザー関数は、ラジオボタンに応じて変数 $func によって呼び出すようにしている。

参考サイト

(この項おわり)
header