【问题标题】:Using PHP to create a graphing class [closed]使用 PHP 创建图形类 [关闭]
【发布时间】:2012-12-25 02:13:07
【问题描述】:

我选择承担的部分学校编程项目需要根据用户数据使用 PHP 生成条形图。我的老师已经明确表示我不能使用开源课程或任何其他人的代码。他还禁止我使用 CSS 来显示图表,部分声称这是不可能的(我在网上看到过方法)。

我简要了解了一些流行的 PHP 图形类,例如 Jpchart 和 Pchart,它们看起来都相当复杂,有数万行代码。

当然要编写一个类来生成jpeg也必须相当复杂。

有没有人有什么建议,或者我应该放下脚告诉他这些期望是不现实的?

【问题讨论】:

  • 是的,告诉他他的期望是不切实际的,他患有 NIH 综合症。
  • 并非如此。另一个人正在要求预先编写的代码。我想知道没有预先编写的代码是否可行。感谢您的回复。
  • 不使用 CSS?如果这是他想要的标准,那就足够公平了。但是声称不可能?? 真的?听起来你的老师需要一些教学。

标签: php css class graph


【解决方案1】:

完全可以通过 html/css 绘制图表。

假设您制作了一个条形图。首先计算 min + max 并定义两者的高度。之后取所有其他值并决定它们的高度(最小值/最大值的某个百分比)。在那之后,你在我心中有两个选择。 1,将您的html呈现为带有单元格的表格,并在给定高度/宽度的情况下明确表示。或使用 id 和类渲染一堆 div,然后动态创建您的 css(与样式属性内联或仅将 css 动态写入脚本标签)并在您的 css 中根据您之前决定的设置高度。

这里是 some code 使用 D3js 库。 这种方法很合理,只需使用 php 而不是 js 以类似的方式编写代码。

如果您想查看其他示例:here are some examples 的 html/css 图表。 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>

【讨论】:

    【解决方案2】:

    禁止你使用 CSS 对他来说是个彻头彻尾的蠢事。如果不使用 GDlib 函数 [我假设这不是练习的重点],您可以创建一个 1x2 单元格表并根据条形值设置单元格宽度,但这会有点痛苦 没有 CSS。为避免引起 Dickbag 教授的愤怒,您将无法在所有内容上设置 HTML 属性。

    您的讲师完全错误认为 CSS 无法做到这一点。

    如果他只是一个愤怒的老胡须,他可能想要这样的东西:

    Tom:   |****      | 43%
    Dick:  |***       | 27%
    Harry: |********  | 82%
    

    所以这就像回到 1981 年的某个 DEC PDP 一样。

    编辑

    由于您的讲师规定他需要 图像 形式的图表,因此您需要使用 GD library functionsimagefilledrectangle() 的文档页面中的示例代码应该足以让您入门:

    <?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);
    

    【讨论】:

    • 哦...也没有 HTML。
    • @Sam ...真的吗?我刚刚进行的编辑中提到的“愤怒的颈须”概率超过 90%。
    • 哈哈。他明确表示它必须是一个“图像”。我认为他实际上希望我生成 jpeg。这是我编程的第一年,他希望我做一大批专业程序员长期以来所做的事情。
    • @Sam 您需要在问题中明确说明您需要生成条形图的图像。仅供参考:在 我的 第一年编程课程中,我们在非常早期的 Java 版本中进行了类似的练习,这比使用 PHP GD functions 更不友好。仅仅因为某些事情以前做过并且别人做得更好并不意味着它不是一个有用的学习练习。
    • 练习不是他给我安排的。这是我的课程作业。我选择了某种图形功能。就此而言,他从未使用过 PHP 或任何比 Pascal 和 Basic 更复杂的东西。他只是在我们前进的过程中编造一些东西。
    【解决方案3】:

    将其分解为基本任务就很简单了。回想一下你最初在学校是如何教你如何绘制图表的:

    • 您从图表的大小开始(即纸张大小)
    • 您知道需要绘制多少条,以便计算出每个条所需的空间
    • 您知道数据中的最大值和最小值,因此很容易计算出比例

    剩下的只是键和标题!

    【讨论】:

      【解决方案4】:

      如果我们只是在谈论一个简单的条形图,他对 CSS 的看法是错误的,而且从 CSS 发明之日起就一直是错误的。使用几个 &lt;div&gt; 标签和少量 CSS 创建条形图很简单。

      他可能正在寻找他理解的特定解决方案——也许是一个 HTML 表格? (我真的希望不要)或者使用 PHP 中的 GD 库生成图像。

      如果我是你,我会选择一个不寻常的解决方案,比如 SVG。以 SVG 生成图表,并将其输出到浏览器。符合他的标准,但没有使用他的任何“禁止”选项。 (但请注意 - 在选择此选项之前,请确保您的老师使用支持 SVG [即比 IE8 更新] 的浏览器!)

      【讨论】:

        【解决方案5】:

        这并不难。查看php中的图像函数。 gdimage magick

        尤其是rectangle 函数对您来说会很有趣。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-23
          相关资源
          最近更新 更多