如何将数据从电子邮件正确拆分为一个数组

时间:2018-11-13 22:48:51

标签: php jquery arrays ajax pie-chart

前言: 我的总体目标是创建一个饼图,显示下面的数据。饼形图上的切片将显示为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饼图的想法,我只是认为这可能是更好的选择...

1 个答案:

答案 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)
  }
  ...*/