我正在尝试为公司内部网页面设置一些简单的Amcharts图表。在过去的两周里,我创建了HTML / JS并使用Amcharts生成了一个漂亮的图形(在HTML中用于演示目的的硬编码数据)。我还安装了XAMPP并创建了一个MySQL数据库,其中填充了表和一些从csv文件导入的数据。
到目前为止,一切工作正常 - 我可以显示漂亮的图形,我可以收集数据以向图表提供数据。但是,我一直在从两端解决这个问题(将源数据导入数据库并在网页上的图表中显示数据)。现在我需要加入这两个端点,这样我就可以用来自MySQL的数据提供Amcharts。
我知道我需要使用PHP从MySQL获取数据并将其放入Amcharts可以使用的数组中,但我的PHP知识非常基础,我正在努力使用代码。
我拥有的PHP代码成功连接到MySQL并提取数据以在浏览器中显示 - 这是有效的。我只是不知道如何以Amcharts绘制图形所需的格式将数据转换为多维数组。
如果你们能在这里给我一些帮助并填写缺失的部分,真的很棒。我有一些伪代码用于创建数组的逻辑,作为“真正的”PHP代码的基础。
这是填充数组的伪代码:
; charset = UTF-8','','',数组(PDO :: ATTR_EMULATE_PREPARES => false, PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION));
$stmt = $db->query("SELECT * FROM <mytable> WHERE <mycondition>"); $prevweek = "9999"; $headrowdone = 0; while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if ($prevweek < $row['WeekNumber']) { // New week so write out Category X Label ('Week') with the week number of the following data rows chartData.push($DataRow); $headrowdone = 0; } if (!$headrowdone) { $DataRow = "Week: "+$row['WeekNumber']; $headrowdone = 1; } // Write out the X-Axis Category value and the Y-Axis value $DataRow = $DataRow+$row['XAxisCategory']+": "+$row['YAxisCategory']; $prevweek = $row['WeekNumber']; } chartData.push($DataRow); ?>
SQL表如下所示:
CREATE TABLE(WeekNumber varchar(4),XAxisCategory varchar(50),YAxisValue integer);
并且包含以下数据:'1301','A',10'1301','B',20'1301','C',24 '1302','A',11'1302','B',22'1302','C',27'1303','A',14'1303','B',23 '1303','C',28 ......等等。
amcharts的数据数组必须如下所示:
var chartData = [{Week:“1301”, 答:10, B:20, C:24 },{ 周:“1302”, 答:11, B:22, C:27 },{ 周:“1303”, 答:14, B:23, C:28 ....等等 }];
答案 0 :(得分:2)
// This is spoofing your fetch via pdo
$rows [] = array('WeekNumber'=>1301, 'A'=>10);
$rows [] = array('WeekNumber'=>1301, 'B'=>20);
$rows [] = array('WeekNumber'=>1301, 'C'=>25);
$rows [] = array('WeekNumber'=>1302, 'A'=>12);
$rows [] = array('WeekNumber'=>1302, 'B'=>22);
$rows [] = array('WeekNumber'=>1302, 'C'=>27);
//var_dump($rows);
// set up some vars
$lastweek = '';
$ctr = 0;
$data = array();
// loop thru the vars, build another array
foreach( $rows as $row){
if($row['WeekNumber'] !== $lastweek){
$ctr++;
$data[$ctr] = array('Week'=>$row['WeekNumber']);
$lastweek= $row['WeekNumber'];
}
// this could be nicer, but for now will do
if( isset($row['A']) ) $data[$ctr]['A'] = $row['A'];
if( isset($row['B']) ) $data[$ctr]['B'] = $row['B'];
if( isset($row['C']) ) $data[$ctr]['C'] = $row['C'];
}
var_dump($data);
然后使用json_encode()进入你想要的格式。
这个答案有点笨拙,但至少要远离构建字符串来制作json。