2011-12-27 11 views
0

私はphp-pageでsqlight-dataを取得しています。 下部は、Flotグラフのプロット(配列の時系列データとしてのUnixエポックタイムスタンプ)のために準備した重要な要素です。 私は何が間違っていますか?ご意見をお聞かせください。timeseriesデータ配列をFlots javascriptに正しく渡す方法は?

エコーjson_encode($ DATASET1)PHPの一部で

を与える:

を[1320710855000,44] [1320711755000,46] [1320712655000,44] [1320713555000,42] [ 1320714456000,56] .. とのchrome資源ショー:

スクリプトタイプ= "テキスト/ javascriptの"> するvar kurve = [13 20774758000,72];

<?php 
error_reporting(E_ALL); 
try { 
    /*** DB erstellen ***/ 
    $dbh = new PDO('sqlite:/var/www/zaehler/inc/db/zaehler.sqlite'); 
    /*** set all errors to excptions ***/ 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $startdate=startdate(); 
    $sql = "SELECT date FROM energielog ORDER BY OID DESC LIMIT 1"; 
    $result = $dbh->query($sql); 
    foreach($result as $row) { 
      if ($row['date']!=$startdate) { 
       $startdate=$row['date']; 
        } 
      } 
    $sql = "SELECT kwh, peak, OID, date, time FROM energielog WHERE date >=".$startdate." ORDER BY OID ASC"; 
    $result = $dbh->query($sql); 

    foreach($result as $row) {     
      $oid=$row['OID']-1; 
      $sql2 = "SELECT kwh FROM energielog WHERE oid <".$oid." ORDER BY OID DESC LIMIT 1"; 
      $result2 = $dbh->query($sql2); 
      foreach($result2 as $row2) { 
        $letzter_eintrag=str_replace(",",".",$row2['kwh']); 
        } 
        $aktueller_eintrag=str_replace(",",".",$row['kwh']); 
        $eintrag=round(($aktueller_eintrag-$letzter_eintrag)*1000/0.5,0); 
        $peak=$row['peak']*1000;      
        $time=str_pad($row['time'],6,'0',STR_PAD_LEFT); 
        $times=substr($time,0,2).":".substr($time,2,2);      
        $timeStamp=mktime(
        substr($time,0,2), 
        substr($time,2,2), 
        substr($time,4,2), 
        substr($startdate,2,2), 
        substr($startdate,4,2), 
        substr($startdate,0,2) 
        );       
        $dataset1 = array(($timeStamp)*1000, $eintrag);      
        echo json_encode($dataset1); 
      } 
} 
catch(Exception $e) 
{ 
    echo $e->getMessage(); 
    die(); 
} 
?> 
<div id="placeholder" style="width:600px;height:300px;"></div> 
<script type="text/javascript"> 

var kurve = <?php echo json_encode($dataset1); ?>; 

$(function() {  
$.plot($("#placeholder"), [kurve], { xaxis: { mode: "time", timeformat: "%y/%m/%d/%H:%M"} });  
}); 
</script> 

答えて

1

これを見ると、すばやくいくつかのものが私に飛び出します。

ワン:

var kurve = "<?php echo json_encode($dataset1); ?>"; 

あなたは、PHPの周り"を望んでいません。これは、kurve varを配列の配列ではなく文字列にします。

2:

[1320710855000,44][1320711755000,46][1320712655000,44][1320713555000,42][1320714456000,56] 

あなたやエコーが各配列ポイント間,をドロップしましたか?これは有効なJS構文ではありません。

EDITS

私は今それを参照してください。 dataset1は各ループで再宣言されています。あなたが欲しい:返信用

$dataset1 = array(); 
foreach($result as $row) { 
    <do your processing..? 
    array_push($dataset1, array(($timeStamp)*1000, $eintrag)); 
} 
+0

おかげで、エコーがこれを提供します[1320710855000,44] – frank

+0

私はその1組に縮小foreachのを超えて、正しく配列を構築していないですね。 私はこれを収穫することができました。エポックタイムは文字列として、 "1320710855":44、 "1320711755":46、 "1320712655":44 – frank

+0

@frank、上記の編集を参照してください。 – Mark

関連する問題