我选择进行的部分学校编程项目需要根据用户数据使用PHP生成条形图。我的老师明确表示我不得使用开源类或任何其他人的代码。他也禁止我使用CSS来显示图表,部分声称它不可能(我已经在网上看到过这种方式)。
我简要介绍了一些流行的PHP图形类,例如Jpchart和Pchart,它们看起来相当复杂,有数万行代码。
当然必须编写一个类来生成jpeg也必须相当复杂。
有没有人有任何建议,或者我应该放下脚步告诉他这些期望是不现实的?
答案 0 :(得分:1)
他对CSS的看法是错误的,如果我们刚刚谈论一个简单的条形图,那么自CSS发明之日起就出错了。使用少量<div>
标签和少量CSS创建条形图是微不足道的。
他可能正在寻找他理解的特定解决方案 - 也许是HTML表格? (我真的希望不是)或者可能使用PHP中的GD库生成图像。
如果我是你,我会选择像SVG这样的不寻常的解决方案。在SVG中生成图表,并将其输出到浏览器。符合他的标准,但没有使用他的任何“禁止”选项。 (但请注意 - 在使用此选项之前,请确保您的教师使用支持SVG的浏览器[即比IE8更新]!)
答案 1 :(得分:0)
这并不难。看一下php中的图像功能。 gd或image magick。
特别是rectangle函数对你来说很有意思。
答案 2 :(得分:0)
禁止你使用CSS是他的全部动作。没有使用GDlib函数[我假设不是练习的重点]你可以创建一个1x2单元格表并根据条形值设置单元格宽度,但它会有点痛苦没有 CSS。为了避免Dickbag教授的愤怒,你将无法在所有事情上设置HTML属性。
您的教师完全错误 关于CSS无法实现这一点。
如果他只是一个愤怒的老式领带,他可能想要这样的事情:
Tom: |**** | 43%
Dick: |*** | 27%
Harry: |******** | 82%
所以这就像1981年在某些DEC PDP上回来一样。
由于您的教师规定他希望图形采用图像的形式,因此您需要使用GD library functions。 imagefilledrectangle()
文档页面中的示例代码应该足以让您入门:
<?php
// Create a 55x30 image
$im = imagecreatetruecolor(55, 30);
$white = imagecolorallocate($im, 255, 255, 255);
// Draw a white rectangle
imagefilledrectangle($im, 4, 4, 50, 25, $white);
// Save the image
imagepng($im, './imagefilledrectangle.png');
imagedestroy($im);
答案 3 :(得分:0)
通过html / css绘制图表是完全可能的。
让我们说你制作条形图。首先计算min + max并计算两者的高度。然后取出所有其他值并决定它们的高度(最小值/最大值的某个百分比)。在那之后,你有两个选择。 1,给出你的html作为表格w / cells和explicilty给出它们的高度/宽度。或者使用id和类渲染一堆div然后动态创建你的css(或者使用style属性内联或者只是动态地将css写入脚本标记)并在你的css中根据你之前的决定设置高度。
这里是使用D3js库的some code。 这种方法非常合理,只需使用php而不是js以类似的方式执行代码。
如果你想看一些其他例子:html / css图表的here are some examples。 pcharts是一个很棒的库,它使用GD php扩展来生成jpg / png格式的图表图像。如果您计划动态生成图像,这个库应该提供一些很好的灵感。
<强>更新强> 我忍不住做一个php / css的例子:
<html>
<head>
<style type="text/css">
.bar {
background: #660000;
color: #fff;
height: 20px;
width: auto;
min-width: 2px;
clear: both;
margin-bottom: 5px;
padding: 5px;
font-weight: bold;
}
</style>
</head>
<body>
<?php
//array of values
$vals = array(
'git' => 9001,
'svn' => 4213,
'bitkeeper' => 7391,
'mercurial' => 2114,
'cvs' => 806,
);
//minimim and maximum
$min = 1;
$max = 200;
//calculate scale, draw, and loop
foreach ($vals as $key => $val) {
$scale = (2 * ($val-$min)/($max-$min))*8;
echo('<div class="bar" style="width: '.$scale.'px" title="'.$key.' = '.$val.'">'.$key."</div>");
}
?>
</body>
</html>
答案 4 :(得分:0)
一旦你将其分解为基本任务,这很简单。回想一下你最初在学校如何制作图表的方法:
其余的只是键和标题!