-1

最近、PhpMyGraph5.0 を使用してファイルからグラフを描画しようとしています。作成者のサイト ( http://phpmygraph.abisvmm.nl/ ) には、次のサンプル ファイルがあります。

<?php    
//Set content-type header
header("Content-type: image/png");

//Include phpMyGraph5.0.php
include_once('phpMyGraph5.0.php');

//Set config directives
$cfg['title'] = 'Example graph';
$cfg['width'] = 500;
$cfg['height'] = 250;

//Set data
$data = array(
    'Jan' => 12,
    'Feb' => 25,
    'Mar' => 0,
    'Apr' => 7,
    'May' => 80,
    'Jun' => 67,
    'Jul' => 45,
    'Aug' => 66,
    'Sep' => 23,
    'Oct' => 23,
    'Nov' => 78,
    'Dec' => 23
);

//Create phpMyGraph instance
$graph = new phpMyGraph();

//Parse
$graph->parseHorizontalLineGraph($data, $cfg);
?> 

ファイルから入力を取得する必要があるため、例のファイルを変更して $data の割り当てを次のように変更しました。

$data = file("$PATH/$MYFILE");

MYFILE 内のテキストをフォーマットしました。これらはファイルのいくつかの行です。

'00:00' => 19,
'00:05' => 19,
'00:10' => 21,
...
'17:10' => 21,
'17:15' => 21,
'17:20' => 21,

しかし、グラフを描画しようとすると、グラフの代わりに次のメッセージが表示されます。

"exception `Exception` with message `The value of the key %s` is not numeric.`"  

PhpMyGraph5.0.php で検索したところ、例外をスローするテストが見つかりました。

//Loop
foreach($data as $key => $value) {
    //Test
    if(!is_numeric($value)) {
        throw new Exception('The value of the key "%s" is not numeric.');
    }
...

「throw Exception」をこのキャストに置き換えようとしました:

$value=(int)$value;

しかし、空のグラフしか得られません。

MYFILE の内容を $data = array(PASTE_HERE); 内に手動で貼り付けた場合 動作しますが、手動ではできません。

問題は値のデータ型に関するものだと思いますが、この問題を解決する方法がわかりません。

みんなに感謝し、私の悪い英語でごめんなさい。

4

1 に答える 1

1

その例外は正しくコーディングされていないようです。これに変更してみてください。値が数値ではないことがわかったキーの値が得られるはずです。これは、エラーの場所を特定するのに役立つ場合があります:-

throw new Exception(sprintf('The value of the key "%s" is not numeric.',$key));

編集

OK、問題はわかりました。$data = file("$PATH/$MYFILE");

これを使ってテストすると

$data = file("$PATH/$MYFILE");
print_r($data);

出力が得られます:

Array
(
    [0] => '00:00' => 19,
    [1] => '00:05' => 19,
    [2] => '00:10' => 21,
    [3] => '17:10' => 21,
    [4] => '17:15' => 21,
    [5] => '17:20' => 21
)

したがって、インデックス [0] は実際には数値ではなく配列であるため、エラーが発生します。

データの入力方法を再考する必要があります。

サイズについてこれを試してください:

データファイルを次のように変更します

'00:00',19
'00:05',19
'00:10',21
'17:10',21
'17:15',21
'17:20',21

そして、これを行うためのコード

$data = array();

$handle = fopen('tst.txt', 'r');
while (!feof($handle)) {
    $line = fgets($handle, 8192);
    list($time,$count) = explode(',',$line);
    $data[$time] = $count;
}
fclose($handle);
print_r($data);

これにより、次の配列が生成されます

Array
(
    ['00:00'] => 19
    ['00:05'] => 19
    ['00:10'] => 21
    ['17:10'] => 21
    ['17:15'] => 21
    ['17:20'] => 21
)

そもそもあなたが望んでいたものだと思います。

編集2

パッケージを変更しないで、送信するものを変更してください

この行を置き換えます

$data[$time] = $count;

$data[$time] = (int)$count;

それはそれを行う必要があります。

于 2014-07-17T08:24:04.783 に答える