pchart 結合wiki 自動繪圖

wKioL1N9yWfzcjWfAAE_P8iNJG4778.jpg


上圖爲pchart 繪出,本人之所以寫這個文章,是希望能有更多的user來使用pchart,這樣pchart也會出更多的代碼!


繪圖的數據時直接從公司的wiki網站的mysql上抓的(因爲網站也是我自己架設的,所以可以直接抓到相關的數據)!

wiki的mysql中數據比較的亂,有很多的html標籤,如果只是使用一次是沒有什麼問題的,但是如果經常使用這些數據繪製不同的圖標,就會自己都覺得很煩!

本人做法:現將wiki的mysql 數據處理並導入到新的MySQL中,然後在利用新的mysql和pchart來畫圖!

代碼如下,有問題的可以留言!


處理wiki 並導入新的mysql代碼:

<?php

$did = 804; //sa grid
$wyear = 2014;
$connect=new mysqli("localhost","pchart","????","pchartdb");
        if(mysqli_connect_errno()){
                echo "error:".mysqli_connect_error();
                $connect=null;
                exit;
        }
$mysqli=new mysqli("localhost","wiki","????","wiki");
        if(mysqli_connect_errno()){
                echo "error:".mysqli_connect_error();
                $mysqli=null;
                exit;
        }
$thisyear=date('Y');
$thismonth=date("m");
$thismonth=$thismonth;

$sql_report = "select title,content from wiki_doc where did='$did'";
$result=$mysqli->query($sql_report);
$sql_result = $result->num_rows;
#print_r($sql_result);
for($i=0;$i<=$sql_result;$i++){
        $rows=$result->fetch_assoc();
        #$content = strip_tags($rows['content']);
        #$content = trim($content);
        #str_replace(' ','=',$content);
// must use this way ,cat not use strip_tags
        $content = $rows['content'];
        $pattern = "/<[^<]*>/";
        $replacement="=";
        $content1  = preg_replace($pattern,$replacement,$content);
        $pattern1 = "/=+/";
        $replacement1 = ":";
        $content2 = preg_replace($pattern1,$replacement1,$content1);
        $content2 = preg_replace('/&nbsp;/','',$content2);
//===================================================================
    $grid_table = split(':',$content2);
        $i = 6;
        while($grid_table[$i] > 0){
                echo "$grid_table[$i]\n";
                $check_result = 0;
                $grid_job = $grid_table[$i];
                $month = ($i - 3)/3;
                $select_check = "select month  from pchart_sa_grid where month='$month' and year='$wyear'";
                $check_result=$connect->query($select_check);
                $check_result_value = $check_result->num_rows;
                echo "month:$month wyear:$wyear check_result_value:$check_result_value\n";
                echo "check_result:$check_result\n";
                if (!$check_result_value){
                        echo "Insert\n";
                        $insert = "insert into pchart_sa_grid(year,month,gridjob) values('$wyear','$month','$grid_job')";
                        $insert_result=$connect->query($insert);
                        echo "insert_result:$insert_result\n";
                        if($insert_result == 0){
                                echo "Error: Insert action failed ,critical<br>";
                        }
                        else{
                                echo "Info:pchartdb table insert successfully<br>";
                        }
                }
                else{
                        echo "update\n";
                        $update = "update pchart_sa_grid set month='$month',gridjob='$grid_job' where month='$month' and year='$wyear'";
                        $update_result=$connect->query($update);
                        if($update_result == 0){
                                echo "Error: Update action failed ,critical<br>";
                         }
                         else{
                                 echo "Info:pchartdb table update successfully<br>";
                }
                }
                $i = $i+3;
                #$check_result_value = $check_result->num_rows;
                #echo "check_result_value:$check_result_value <br>";    
        }

        #print_r($grid_table);
}

 pchart 畫圖代碼:

<?php

system("php /wiki/php/update_sa_grid.php > /dev/null");
$grid = array();
$connect=new mysqli("localhost","pchart","12345678","pchartdb");
        if(mysqli_connect_errno()){
                echo "error:".mysqli_connect_error();
                $connect=null;
                exit;
        }
$sql = "select * from pchart_sa_grid";
$result = $connect->query($sql);
$sql_result = $result->num_rows;
for($i=0;$i< $sql_result;$i++){
        $rows=$result->fetch_assoc();
        $gridnumber = $rows['gridjob'];
        $grid_year = $rows['year'];
        $grid_month = $rows['month'];
        $grid_time = mktime(0,0,0,$grid_month,1,$grid_year);
        #$grid_time = $grid_year."/".$grid_month;
        $grid["$grid_time"] = $gridnumber;
        //print_r($rows);
}


//print_r($grid);

// dogrid 有兩個功能
// 1. 將grid 數組進行排序,按照key的時間先後排序
// 2. 取出最新的12個月的數據
dogrid($grid);
//      print_r($grid);
function dogrid(&$grid){
        $key_arr = array();
        $key_arr_new = array();
        $gridtime = array();
        $gridnumber = array();
        $pic = array();

        if(!is_array($grid)){
                echo "Error001 grid is not a arrary\n";
                exit;
        }

//數據的key 提取出來,是時間 
        foreach ($grid as $key => $value){
                array_push($key_arr,$key);
                      }
// 將提取出來的時間進行排序,目的是取出最新的12個月的數據
        arsort($key_arr);
        reset($key_arr);
        $arr_number = count($key_arr);
        if($arr_number > 12){
                for($i=0;$i<12;$i++){
                        $key_new = array_shift($key_arr);
                        array_push($key_arr_new,$key_new);
                }
        }
        else{   
                for($i=0;$i < $arr_number;$i++){
                        $key_new = array_shift($key_arr);
                        array_push($key_arr_new,$key_new);
                }
        }
//將提取出來的12個月數據,重新反向排序,目的是輸出的時候能夠,先輸出最舊的月份
        
        sort($key_arr_new);
        reset($key_arr_new);
        $arr_number_new = count($key_arr_new);
// 將月份 x座標,和 grid job y座標分別賦值給畫圖的數組
        for($i=0;$i<$arr_number_new;$i++){
                array_push($gridtime,date('Y/m',$key_arr_new[$i]));
                array_push($gridnumber,$grid["$key_arr_new[$i]"]);
        }
// 因爲返回值,只能是一個,所以定義一個數據將其返回! 因爲用的指針引用,所以最終的grid 數組裏面的值是會變得
        $grid = array();
        $grid['x'] = $gridtime;
        $grid['y'] = $gridnumber;

        
        return $grid;
}

$gridnumber = $grid['y'];
$gridtime = $grid['x'];
// Standard inclusions
 include("pChart/pData.class");
 include("pChart/pChart.class");

 // Dataset definition
 $DataSet = new pData;
 $DataSet->AddPoint($gridnumber,"Serie1");
// $DataSet->AddPoint(array(23,432,43,153,234),"Serie2");
 $DataSet->AddPoint($gridtime,"Serie3");
 $DataSet->AddSerie("Serie1");
 //$DataSet->AddSerie("Serie2");
 $DataSet->SetAbsciseLabelSerie("Serie3");
 $DataSet->SetSerieName("Grid Job Number","Serie1");
 //$DataSet->SetSerieName("Outgoing","Serie2");
 $DataSet->SetYAxisName("Grid Job Number");
 $DataSet->SetYAxisFormat("metric");
// $DataSet->SetXAxisFormat("date");

 // Initialise the graph   
 $Test = new pChart(700,230);
 $Test->setFontProperties("Fonts/tahoma.ttf",8);
 $Test->setGraphArea(85,30,650,200);
 $Test->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);
 $Test->drawRoundedRectangle(5,5,695,225,5,230,230,230);
 $Test->drawGraphArea(255,255,255,TRUE);
 $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);
 $Test->drawGrid(4,TRUE,230,230,230,50);

 // Draw the 0 line   
 $Test->setFontProperties("Fonts/tahoma.ttf",6);
 $Test->drawTreshold(0,143,55,72,TRUE,TRUE);

 // Draw the line graph
 $Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
 $Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);

 // Finish the graph
 $Test->setFontProperties("Fonts/tahoma.ttf",8);
 $Test->drawLegend(90,35,$DataSet->GetDataDescription(),255,255,255);
 $Test->setFontProperties("Fonts/tahoma.ttf",10);
 $Test->drawTitle(60,22,"Grid Job Number",50,50,50,585);
 $Test->Render("grid.png");
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章