PHP-柱状统计图出世!大家一定需要的(从ASP移植)

sfply 2004-04-13 03:48:06

测试地址:http://www.portable-audio.com/tj.php

代码如下:

<?php
$total[1][1]=200;
$total[2][1]=800;
$total[3][1]=100;
$total[4][1]=600;
$total[5][1]=122;
$total[6][1]=323;
$total[7][1]=108;

$total[1][2]="中国经营报";
$total[2][2]="招聘网";
$total[3][2]="51Job";
$total[4][2]="新民晚报";
$total[5][2]="新闻晚报";
$total[6][2]="南方周末";
$total[7][2]="羊城晚报";

$total_no=7;
?>
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<!--[if !mso]>
<style>
v\:* { behavior: url(#default#VML) }
o\:* { behavior: url(#default#VML) }
.shape { behavior: url(#default#VML) }
</style>
<![endif]-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<style>
TD { FONT-SIZE: 9pt}
</style></head>
<body topmargin=5 leftmargin=0 scroll=AUTO>
<?php table1($total,100,20,20,30,600,400);?>
</body>
</html>
<?php
function table1($total,$table_x,$table_y,$thickness,$table_width,$all_width,$all_height)
{
/*参数含义(传递的数组,横坐标,纵坐标,柱子的厚度,柱子的宽度,图表的宽度,图表的高度,图表的类型)
php柱状统计图表函数(由ASP代码移植)
PHP源码作者: 随风飘零叶(sfply) ASP源码作者: 龚鸣(Passwordgm)
由于本函数原作者未提供应用于PHP上的代码,并且许多PHP朋友有此需要,故移植之,感谢原作者龚鸣(Passwordgm)提供了这么好的VML效果

函数。随风飘零叶 敬上!
版本2.0 最后修改日期 2004-4-2。
非常感谢您使用这个函数,请您使用、修改和转载时保留版权信息,这是对作者工作的最好的尊重。*/

$tb_color[1][1]="#d1ffd1";
$tb_color[2][1]="#ffbbbb";
$tb_color[3][1]="#ffe3bb";
$tb_color[4][1]="#cff4f3";
$tb_color[5][1]="#d9d9e5";
$tb_color[6][1]="#ffc7ab";
$tb_color[7][1]="#ecffb7";

$tb_color[1][2]="#00ff00";
$tb_color[2][2]="#ff0000";
$tb_color[3][2]="#ff9900";
$tb_color[4][2]="#33cccc";
$tb_color[5][2]="#666699";
$tb_color[6][2]="#993300";
$tb_color[7][2]="#99cc00";

$line_color="#69f";
$left_width=70;
$length=$thickness/2;
$total_no=7;
$temp1=0;
for ($i=1;$i<=$total_no;$i++)
{
if ($temp1<$total[$i][1])
{
$temp1=$total[$i][1];
}
}
$temp1=floor($temp1);
if ($temp1>9)
{
$temp2=substr($temp1,2,1);
if ($temp2>4)
$temp3=(floor($temp1/(pow(10,(strlen($temp1)-1))))+0.5)*(pow(10,(strlen($temp1)-1)));
else
$temp3=(floor($temp1/(pow(10,(strlen($temp1)-1))))+0.5)*(pow(10,(strlen($temp1)-1)));
}
else
{
if ($temp1>4)
$temp3=10;
else
$temp3=5;
}
$temp4=$temp3;

echo "<!--[if gte vml 1]><v:rect id='_x0000_s1027' alt='' style='position:absolute;left:";
echo ($table_x+$left_width)."px;top:".$table_y."px;width:".$all_width."px;height:";
echo $all_height."px;z-index:-1' fillcolor='#9cf' stroked='f'>";
echo "<v:fill rotate='t' angle='-45' focus='100%' type='gradient'/></v:rect><![endif]-->";
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='";
echo ($table_x+$left_width)."px,".($table_y+$all_height)."px' to='";
echo ($table_x+$all_width+$left_width)."px,".($table_y+$all_height)."px'/><![endif]-->";
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='".($table_x+$left_width)."px,";
echo $table_y."px' to='".($table_x+$left_width)."px,".($table_y+$all_height)."px'/><![endif]-->";

$table_space=($all_width-$table_width*$total_no)/$total_no;
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='".($table_x+$left_width+$length)."px,";
echo $table_y."px' to='".($table_x+$left_width+$length)."px,";
echo ($table_y+$all_height-$length)."px' strokecolor='".$line_color."'/><![endif]-->";

for ($i=0;$i<=$all_height-1;$i=$i+$all_height/5)
{
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='";
echo ($table_x+$left_width)."px,".($table_y+$all_height-$length-$i);
echo "px' to='".($table_x+$left_width+$length)."px,".($table_y+$all_height-$i);
echo "px' strokecolor='".$line_color."'/><![endif]-->";
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='".($table_x+$left_width+$length);
echo "px,".($table_y+$all_height-$length-$i)."px' to='";
echo ($table_x+$all_width+$left_width)."px,".($table_y+$all_height-$length-$i);
echo "px' strokecolor='".$line_color."'/><![endif]-->";
echo "<!--[if gte vml 1]><v:line id='_x0000_s1027' alt='' style='position:absolute;left:0;";
echo "text-align:left;top:0;flip:y;z-index:-1' from='";
echo ($table_x+($left_width-15))."px,".($table_y+$i)."px' to='";
echo ($table_x+$left_width)."px,".($table_y+$i)."px'/><![endif]-->";
echo "<!--[if gte vml 1]>";
echo "<v:shape id='_x0000_s1025' type='#_x0000_t202' alt='' style='position:absolute;";
echo "left:".$table_x."px;top:".($table_y+$i)."px;width:".$left_width;
echo "px;height:18px;z-index:1'>";
echo "<v:textbox inset='0px,0px,0px,0px'>";
echo "<table cellspacing='3' cellpadding='0' width='100%' height='100%'><tr><td align='right'>";
echo $temp4;
echo "</td></tr></table></v:textbox></v:shape><![endif]-->";
$temp4=$temp4-$temp3/5;
}

for ($i=1;$i<=$total_no;$i++)
{
$temp_space=$table_x+$left_width+$table_space/2+$table_space*($i-1)+$table_width*($i-1);
echo "<v:rect id='_x0000_s1025' alt='' style='position:absolute;left:".$temp_space."px;top:";
echo ($table_y+$all_height*(1-($total[$i][1]/$temp3)));
echo "px;width:".$table_width."px;height:".($all_height*($total[$i][1]/$temp3));
echo "px;z-index:1' fillcolor='".$tb_color[$i][2]."'>";
echo "<v:fill color2='".$tb_color[$i][1]."' rotate='t' type='gradient'/>";
echo "<o:extrusion v:ext='view' backdepth='".$thickness."pt' color='".$tb_color[$i][2]."' on='t'/>";
echo "</v:rect>";
echo "<v:shape id='_x0000_s1025' type='#_x0000_t202' alt='' style='position:absolute;";
echo "left:".$temp_space."px;top:";
echo ($table_y+$all_height*(1-($total[$i][1]/$temp3))-$table_width);
echo "px;width:".($table_space+15)."px;height:18px;z-index:1'>";
echo "<v:textbox inset='0px,0px,0px,0px'><table cellspacing='1' cellpadding='0' width='100%'

height='100%'><tr><td align='center'>";
echo $total[$i][1];
echo "</td></tr></table></v:textbox></v:shape>";
echo "<v:shape id='_x0000_s1025' type='#_x0000_t202' alt='' style='position:absolute;";
echo "left:".($temp_space-$table_space/2);
echo "px;top:".($table_y+$all_height+1)."px;width:".($table_space+$table_width)."px;height:18px;z-index:1'>";
echo "<v:textbox inset='0px,0px,0px,0px'><table cellspacing='3' cellpadding='0' width='100%'

height='100%'><tr><td align='center'>".$total[$i][2]."</td></tr></table></v:textbox></v:shape>";
}

}
?>
...全文
305 点赞 收藏 30
写回复
30 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wukol 2004-09-27
真的耶。很厉害。
回复
loswing 2004-09-27
学习
回复
allkill 2004-09-27
东西不错,在注重注重风格就更好了。
回复
blueoxygen 2004-09-27
hehe...当初想用,可惜两年前看英文文档的时候头大...
回复
jxflll 2004-09-27
不错。还挺漂亮的。不过jpgraph的功能更强大。
回复
raid79 2004-09-27
不知道哪位仁兄研究过jpgraph的
这个东东的效果真是强大的一塌糊涂
回复
raid79 2004-09-27
不错不错
楼主辛苦了
我来仔细看看改到我自己的系统上
谢谢
回复
skystar008 2004-09-27
代码有点乱!
回复
wctt 2004-09-27
没办法形容了,真是大牛代码,以后要多发,万分谢谢
回复
hover_online 2004-09-27
这个帖子好久了,怎么还在
回复
episome 2004-09-27
我把 $total[1][1] 设为2000000;
我以为会顶出去了,原来没有.

好啊. 强!
回复
ImN1 2004-09-27
呵呵,原来不是一幅图,我在写单幅gd图,不过没有那么漂亮(缺少渐变)
回复
mrsun 2004-06-08
很喜欢,我支持你!
回复
syp8065 2004-04-14
:)

我正好需要呢,呵呵,太好了太好了。thQ 楼主。
回复
sfply 2004-04-14
这个我做过,不过各人应用各不相同,可以自己视情况不同而修改
例如我用来统计公司年度月销售,代码如下
不过是ASP代码,但大家看了就知道该怎么改成PHP代码了:)

<!--#include file = "../system/conn.asp"-->
<!--#include file = "../include/graphic.asp"--> '我把VML画图另放在这里
<%
dim mydate,i,a,total_no
dim total(12,2)
mydate=request("sDate") '年度
for i = 1 to 12
a = 0
sql = "select * from orderinfo,finance where finance.Oserial = orderinfo.Oserial and month(OrderDate) = "&i&" and year(OrderDate) = "&cint(mydate)&""
set rs = conn.execute(sql)
do while not rs.eof and not rs.bof
a = a + rs("fAmount")
rs.movenext
loop
total(i,1) = a
total(i,2) = i &"月份"
next

total_no=12
%>
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
<!--[if !mso]>
<style>
v\:* { behavior: url(#default#VML) }
o\:* { behavior: url(#default#VML) }
.shape { behavior: url(#default#VML) }
</style>
<![endif]-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<style>
TD { FONT-SIZE: 9pt}
</style></head>
<body topmargin=5 leftmargin=0 scroll=AUTO>
<%call table1(total,0,30,20,26,760,460,"A",mydate)%>
</body>
</html>
回复
szjq 2004-04-14
挺好,如果楼主能再完美一下,把前端的投票程序都加进来,做成一个完整的系统就不错了
回复
sfply 2004-04-14
countstars(深空)
谢谢,又学到了一招,因为我才学PHP2个星期,太多东西都不会,以后要多向大家请教了!
本来没有那么多echo的
但因为是vml方式,所以一行很长,于是我就分行来写了,不好意思给大家带来不便。
回复
countstars 2004-04-14
$str = <<< HTML
fsdfsdfsd
<>Dfsdf<SDFSDF?$#%$@#$
HTML;

其中HTML这个名字可以随便取比如ABC,但是要一致(区分大小写),最后结束要顶格,也就是要在一行的最开头。也可以直接echo:
echo <<< aBc
<html><html>
aBc;
回复
jxyuhua 2004-04-14
请问一下“<<<”的用法是什么,手册上找不到啊。
回复
adz 2004-04-13
我也觉得用gd会简单很多,不过楼主的精神还是可佳的,话说回来,代码还是力求简洁,要不维护起来不方便。
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告