PHP实现动态柱状图改进版

本文实例分析了PHP实现动态柱状图的改进版。分享给大家供大家参考。具体分析如下:

前面已经写过如果只做动态柱状图的情况,其实原理还是很简单的。因为昨天下午有新的需求,今天上午又修改了一番,并将数据根据编号不同分割显示在表中。

下面把代码粘出来,方便以后自己查看,思路只是一时的火花,今天我想出来这么做,不一定下次还能想得到,也不用费劲的去想,所以写成笔记是比较好的形式。

  1. <!DOCTYPE html>
  2. <?php
  3. // 计算上一个月的今天
  4. function last_month_today($time)
  5. {
  6. $last_month_time = mktime(date("G", $time), date("i", $time), date("s", $time), date("n", $time), 0, date("Y", $time));
  7. $last_month_t = date("t", $last_month_time);
  8. if ($last_month_t < date("j", $time)) {
  9. return date("Y-m-t H:i:s", $last_month_time);
  10. }
  11. return date(date("Y-m", $last_month_time) . "-d", $time);
  12. }
  13. ?>
  14. <?php
  15. include dirname(dirname(dirname(__FILE__))) . '/config.php';
  16. $endDate = date('Y-m-d');
  17. $date = strtotime($endDate);
  18. $beginDate = last_month_today($date);
  19. $sql = 'select count(*) from newpro where p_date>\'' . $beginDate . '\' and p_date<\'' . $endDate . '\'';
  20. $d = db()->query($sql)->fetch(PDO::FETCH_NUM);
  21. $sql2 = $sql . ' and is_pa_check_first=1 and is_pa_check_second=1 and is_pa_check_third=1';
  22. $d2 = db()->query($sql2)->fetch(PDO::FETCH_NUM);
  23. $sql3 = $sql . ' and is_pa_check_first=1';
  24. $d3 = db()->query($sql3)->fetch(PDO::FETCH_NUM);
  25. $sql4 = $sql . ' and is_pa_check_first=1 and is_pa_check_second=1';
  26. $d4 = db()->query($sql4)->fetch(PDO::FETCH_NUM);
  27. // 查询每个人通过审核的情况:
  28. $sqlab = 'select d_m,sum(sroce) as total_score,count(d_m) as total_number
  29. from newpro
  30. where is_pa_check_first=1
  31. and is_pa_check_second=1
  32. and is_pa_check_third =1
  33. group by d_m';
  34. $row = db()->query($sqlab)->fetchAll(PDO::FETCH_ASSOC);
  35. ?>
  36. <html>
  37. <head>
  38. <meta charset="utf-8" />
  39. <style>
  40. div {
  41. background-color: #669900;
  42. width: 50px;
  43. }
  44. #div1 {
  45. height: 200px;
  46. }
  47. #table td {
  48. }
  49. </style>
  50. <script type="text/javascript" src="../../../js/jquery-1.7.2.min.js"></script>
  51. </head>
  52. <body>
  53. <h3 align="center">近一个月总的情况</h3>
  54. <table align="center" >
  55. <caption>
  56. <?php echo "时间:".$beginDate."至".$endDate?>
  57. </caption>
  58. <tr align="center" valign="bottom">
  59. <td>
  60. <p><?php echo $d[0]?></p>
  61. <div ></div>
  62. </td>
  63. <td>
  64. <p><?php echo $d3[0]?></p>
  65. <div px'?>"></div>
  66. </td>
  67. <td>
  68. <p><?php echo $d4[0]?></p>
  69. <div px'?>"></div>
  70. </td>
  71. <td>
  72. <p><?php echo $d2[0]?></p>
  73. <div px'?>"></div>
  74. </td>
  75. </tr>
  76. <tr align="center" valign="top">
  77. <td><p>总计</p></td>
  78. <td><p>一审通过</p></td>
  79. <td><p>二审通过</p></td>
  80. <td><p>审核通过</p></td>
  81. </tr>
  82. </table>
  83. <h3 align="center">近一个月每个人的情况</h3>
  84. <table width="100%">
  85. <caption>每个人的完成情况如下表:</caption>
  86. <!-- 因为总的列数比较长,如果显示在一个表格中,数据会很拥挤,多的话根本就看不清楚。
  87. 所以需要将数据进行分割,根据长度进行动态的分割,显示在多张表中。
  88. -->
  89. <?php
  90. $arr = array_chunk($row,2,false);//2表示分割的单位长度,false表示索引从0开始
  91. foreach($arr as $newRow){
  92. $thStr = "<th width='110px' height='30px'>产品开发编号</th>";
  93. $trStr_total_score = "<tr align='center' height='25px'><td>总分</td>";
  94. $trStr_total_number = "<tr align='center' height='25px'><td>总数量</td>";
  95. $trStr_average_score = "<tr align='center' height='25px'><td>平均分</td>";
  96. $resultStr = "";
  97. foreach ($newRow as $key => $value) {
  98. // echo $key."=>".$value."<br/>";
  99. $x = 0;
  100. foreach ($value as $key2 => $value2) {
  101. // echo $key2 . "=>" . $value2 . "<br/>";
  102. if ($key2 == 'd_m') {
  103. $thStr .= "<th >" . $value2 . "</th>"; // 表头
  104. } elseif ($key2 == 'total_score') {
  105. $value2 = sprintf("%.2f", $value2); //保留2位小数
  106. $trStr_total_score .= "<td>" . $value2 . "</td>";
  107. $x += $value2;
  108. } elseif ($key2 == 'total_number') {
  109. $trStr_total_number .= "<td>" . $value2 . "</td>";
  110. $x /= $value2;
  111. }
  112. }
  113. $x = sprintf("%.2f",$x);
  114. $trStr_average_score .= "<td>" . $x . "</td>";
  115. }
  116. echo "<table width='100%'>";
  117. echo $thStr;
  118. echo $trStr_total_number . "</tr>";
  119. echo $trStr_total_score . "</tr>";
  120. echo $trStr_average_score . "</tr>";
  121. echo "</table>";
  122. echo "<p height='150px'></p>";
  123. }
  124. ?>
  125. </table>
  126. </body>
  127. </html>

数据库方便就不弄了,其实,根据查询的表名和字段名,是很容易建一个测试的数据表的。关键是思路,无论怎么变,思路是关键。