[英]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.