繁体   English   中英

将JavaScript数组传递给PhpPresentation

[英]Pass JavaScript Array to PhpPresentation

我正在尝试使用PhpPresentation使用PHP在Google Analytics(分析)中作为数据源通过图表动态生成PowerPoint演示文稿。

我可以独立进行这两个过程(1.使用手动定义的数据数组生成pptx,2。使用Google Analytics(分析)Core Reporting API中的数据在JavaScript中生成数组)。 但是,我无法成功地合并两个进程(传递JavaScript的数组并在PHP中使用它,而不是在我手动定义的数组中使用)。

1.在PHP中使用手动定义的数组生成pptx

如果我使用以下数组作为数据源(如PhpPresentation文档中所定义),则生成PowerPoint不会出现问题:

$series2Data = array('20151201' => 266.1, '20151202' => 198.5, '20151203' => 271.8);

2.使用来自Google Analytics Core Reporting API的数据生成一个数组

用JavaScript生成的字符串化数组是:

[{"date":"20151201","avgSessionDuration":266.1},{"date":"20151202","avgSessionDuration":198.5},{"date":"20151203","avgSessionDuration":271.8}]

我将此数组传递给生成我的PowerPoint的php:

<form method="post" id="theform" action="Sample_05_Chart.php">

    <input type="hidden" id="markers" name="markers">

    <button>Submit</button>
</form>
<script>
window.onload = function() {
    var form = document.getElementById('theform');
    form.addEventListener('submit', function(){
        var markersField = document.getElementById('markers');
        var markers = data2;
        markersField.value = JSON.stringify(markers);
    });
}
</script>

在PHP文件中,我添加了:

    $markers = json_decode($_POST['markers']);
    $series2Data = $markers;

但是,生成的PowerPoint已损坏,因为我认为数组结构不是PhpPresentation所期望的。

但是,我数组的知识在PHP中不如在JavaScript中那么好。

我如何转换数组,其var_dump看起来像

array(3) { [0]=> object(stdClass)#4 (2) { ["date"]=> string(8) "20151201" ["avgSessionDuration"]=> float(266.1) } [1]=> object(stdClass)#9 (2) { ["date"]=> string(8) "20151202" ["avgSessionDuration"]=> float(198.5) } [2]=> object(stdClass)#10 (2) { ["date"]=> string(8) "20151203" ["avgSessionDuration"]=> float(271.8) } }

进入数组,如第1点所述?

首先, json_decode使用可选的第二个参数。 首先,是您希望解码的json字符串,其次是一个布尔值,该布尔值告诉它是否将其解码为对象数组( stdClass )还是关联数组。

如果要发布数据的关联数组,只需使用json_decode($markers, true)

但是,您要求的格式不会由此给出。 因此,您需要使用javascript或php整理数据。

这是将其转换的php代码:

$series2Data = [];
$markers = json_decode($_POST['markers'], true);

foreach ($markers as $marker) {
    $series2Data[$marker['date']] = $marker['avgSessionDuration'];
}

Javascript:

function formatMarkersToData(markers) {
    var series2Data = {};

    for (var i = 0; i < markers.length; i++) {
        var marker = markers[i];
        series2Data[marker.date] = marker.avgSessionDuration;
    }

    return series2Data;
}

markersField.value = JSON.stringify(
    formatMarkersToData(markers)
);

这两个代码块的作用都是循环遍历数据,并根据series2data变量中date => avgSessionDuration的所需格式设置索引和值。 javascript使用一个对象来允许手动设置密钥。

然后,上面的javascript代码将允许您只使用json_decode($_POST['markers'], true); $series2Data获取正确的关联数组。 否则,您需要PHP代码进行按摩,然后再将其传递给PhpPresentation。

它仅取决于要转换数据的时间-在服务器上还是在客户端上。 如果这完全令人困惑,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM