如何正确地将电子邮件中的数据拆分为数组

How to properly split data from email into an array

前言: 我的总体目标是创建一个显示以下数据的饼图。饼图的切片显示为 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/

数据点部分需要一个与我设法放在一起的数组完全不同的数组。 这要么让我需要完全重组数组,要么使用不同的饼图系统,如果有人有任何建议,我并不反对。我也明白,如果我选择走 canvasjs 的路线,然后获得一个自动更新的饼图,其中包含每分钟更新的数据,我必须实现更像这样的东西:

任何愿意为当前代码提供帮助以更好地适应 canvas js,或者建议一个完全不同的饼图系统的人可能会更好地与我设法构建的数组一起工作,我很感激你非常!顺便说一句,我不喜欢 jquery 饼图的想法,我只是觉得这可能是一个更好的方法...

鉴于

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