对于数据库来说,数据量的大小不是什么障碍,关键是动态地生成图表.
生成图表的例子到处都是,在运行生成图表的程序之前,你的PHP需要一个GD库

解决方案 »

  1.   

    現在的php版本都帶有GD庫,只要把php.ini中;extension=php_gd.dll前的;去掉就行了。不過要生成gif圖片的話,就要去下載專門的php_gif_gd.dll,因爲gif格式的圖片是有版權的。
      

  2.   

    <?
    //由flag变量来控制显示哪一组数据
    /* 
    函数说明 
    $data1:y轴数据(数组)
    $data2:y轴数据(数组)  
    $graphdata:y轴数据--百分比(数组) 
    $label:x轴数据(数组) 
    $height:图像高度 
    $width:图像宽度 
    $font:字号 
    $dot:决定点的大小 
    $bg:背景色 
    $line1 :线色1 
    $line2:线色2
    $line;线色
    $text :文本色 
    $dotcolor:点色 
    $file:输出图像文件名 
    */ 
    $data1=array(33,433,34,434,33,2,1,55);
    $data2=array(343,33,2434,33,33,22,33);$limit1=count($data1);
    for($i=0;$i<$limit1;$i++){
    $s=$s+$data1[$i];
    } //进行统计和$s
    for($i=0;$i<$limit1;$i++){
    $graphdata1[$i]=ceil(($data1[$i]/($s+1))*100);
    } //计算百分比
    $limit2=count($data2);
    for($i=0;$i<$limit2;$i++){
    $s=$s+$data2[$i];
    } //进行统计$s
    for($i=0;$i<$limit2;$i++){
    $graphdata2[$i]=ceil(($data2[$i]/($s+1))*100);
    }
    //计算百分比
    for($i=1;$i<500;$i++){
    $label[]=$i;
    }
    //$label=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52);
    //图像尺寸
    $font=2;//字体大小(1-5))
    $dot=5;//点大小
    $bg=array(0,0,0);//背景色
    $line=array(0,255,255);
    $line1=array(250,250,100);//线色1
    $line2=array(250,250,250);//线色2$text=array(255,255,255);//文本色
    $dotcolor=array(250,255,255);//点色
    xianxingtu($data1 ,
    $data2,  
                     $graphdata1,
    $graphdata2 ,
                     $label, 
                     $height, 
                     $width , 
                     $font, 
                     $dot, 
                     $bg, 
    $line,
                     $line1, 
    $line2,
                     $text, 
                     $dotcolor, 
                     $file) ;//引用函数function xianxingtu($data1 ,
    $data2,  
                     $graphdata1,
    $graphdata2, 
                     $label , 
                     $height, 
                     $width , 
                     $font, 
                     $dot, 
                     $bg, 
    $line,
                     $line1, 
    $line2,
                     $text, 
                     $dotcolor, 
                     $file) 

    $jc=$height/100; 
    $fontwidth= imagefontwidth ($font); 
    $fontheight=imagefontheight($font); //定义宽高$image= imagecreate ($width,$height+20); //创建图像
    $bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]); $line=imagecolorallocate($image ,$line[0],$line[1],$line[2]); $line1=imagecolorallocate($image ,$line1[0],$line1[1],$line1[2]); 
    $line2=imagecolorallocate($image ,$line2[0],$line2[1],$line2[2]); 
    $text=imagecolorallocate($image ,$text[0],$text[1],$text[2]); 
    $dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$dotcolor[2]);//设定颜色 
    imageline ($image,0,0,0,$height,$line); //绘一条从(00)到(0高)的线
    imageline($image,0,$height,$width,$height,$line); //绘一条从(0高)到(宽高)的线
    for ($i=1;$i<11;$i++) { 
    imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10 ,$line); 
    imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text); 
    } //此函数划虚线并以$font字号把图像平均分成十分,标上文字
    for ($i=0;$i<count($data1);$i++){ 
    #echo $tmp."<BR>"; 
    $x1=(($width-50)/count($data1))*($i)+40; 
    #echo $x1 ."<BR>"; 
    $y1=$height-$graphdata1[$i]*$jc; 
    $x2=$x1; 
    $y2=$y1+$graphdata1[$i]*$jc; 
    #echo $y1."<BR>"; 
    imagestring($image, $font, $x1, $y1-2*$fontheight,  $data1[$i] , $text); 
    imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆
    imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor);//填充 
    imagestring($image, $font, $x1, $y2, $label[$i], $text); 
    if ($i>0) { 
    imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line1); 
    }    $tmpx1=$x1;$tmpy1=$y1; 

    for ($i=0;$i<count($data2);$i++){ 
    #echo $tmp."<BR>"; 
    $x1=(($width-50)/count($data2))*($i)+40; 
    #echo $x1 ."<BR>"; 
    $y1=$height-$graphdata2[$i]*$jc; 
    $x2=$x1; 
    $y2=$y1+$graphdata2[$i]*$jc; 
    #echo $y1."<BR>"; 
    imagestring($image, $font, $x1, $y1-2*$fontheight,  $data2[$i] , $text); 
    imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆
    imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor); 
    imagestring($image, $font, $x1, $y2, $label[$i], $text); 
    if ($i>0) { 
    imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line2); 

    $tmpx1=$x1;$tmpy1=$y1; 
    }    
    imagejpeg ($image); 
    } 线性图图示;
    只是思路,没有测试;
      

  3.   

    呵呵,guyanduzui(孤雁独醉西楼下)。我喜欢你上面的代码,谢谢关注,这样的代码有助于我项目的进度。过两天结贴了。各位都有高分~!希望有更好办法的或者有好的思路的请写下。