前言: 我的总体目标是创建一个饼图,显示下面的数据。饼形图上的切片将显示为1-8,并根据冒号右侧的数值匹配百分比。
我有以下通过电子邮件自动发送的数据:
1:64.00
2:63.07
3:62.78
4:61.87
5:47.47
6:43.97
7:36.99
8:19.85
Sent from: [email redacted]
Parameters:3000,0
Time Server:2018.11.05 08:21:53
Time Local: 2018.11.04 22:21:53
电子邮件中总是发送这么多行。
我要做的是拼接数据1-8的行,这是我在这段代码中成功完成的:
if (strpos($row['subject'], 'Currency Relative Strength') !== false) {
$a1 = preg_split('/\r\n|\r|\n/', $row['body']);
$a = array("label" => $b[0], "p1" => $a1[1], "p2" => $a1[2], "p3" => $a1[3], "p4" => $a1[4], "p5" => $a1[5], "p6" => $a1[6], "p7" => $a1[7]);
$array[] = $a;
}
它看起来像这样: [{“ p0”:“ 1:64.00”,“ p1”:“ 2:63.07”,“ p2”:“ 3:62.78”,“ p3”:“ 4:61.87”,“ p4”:“ 5:47.47 “,” p5“:” 6:43.97“,” p6“:” 7:36.99“,” p7“:” 8:19.85“}]
我遇到的问题是我试图按照此处的文档进行操作: https://canvasjs.com/docs/charts/integration/jquery/chart-types/jquery-pie-chart/
数据点部分需要一个数组,该数组与我设法放在一起的数组完全不同。 这要么让我需要完全重组数组,要么使用另一个饼图系统,如果有人有任何建议,我也不反对。我也了解,如果我选择走canvas.js的路线,然后使用每分钟更新一次的数据来获取自动更新的饼图,则我必须实现更多类似的东西:
CanvasJS: Making a chart dynamic with data.php, json encode and ajax(bandwidth meters)
对于愿意在当前代码中提供帮助以更好地适应canvas js的任何人,或者建议一个完全不同的饼图系统,该系统可能更适合于我设法构建的数组,非常感谢您!顺便说一句,我不喜欢jquery饼图的想法,我只是认为这可能是更好的选择...
答案 0 :(得分:1)
给出
$message = '
...
';
以及用于绘制JQuery饼图的格式
dataPoints: [
{ label: "Samsung", y: 30.3, legendText: "Samsung"},
...
]
可以如下提取数据点。
$lines = explode("\n", trim($message));
$firstEightLines = array_slice($lines, 0, 8);
$dataPoints = array_map(function($line) {
list($index, $point) = explode(":", $line);
return [
'label' => "p{$index}",
'legendText' => "p{$index}",
'y' =>(float)$point,
];
}, $firstEightLines);
var_dump($dataPoints);
/*
array(8) {
[0]=>
array(3) {
["label"]=>
string(2) "p1"
["legendText"]=>
string(2) "p1"
["y"]=>
float(64)
}
...*/