将JavaScript数组传递给PhpPresentation

将JavaScript数组传递给PhpPresentation,php,arrays,Php,Arrays,我正试图使用Google Analytics作为数据源,用PHP以图表的形式动态生成PowerPoint演示文稿 我可以独立完成这两个过程(1.使用手动定义的数据数组生成pptx,2.使用来自Google Analytics Core Reporting API的数据生成JavaScript数组)。但是,我无法成功地组合这两个进程(传递JavaScript的数组并在PHP中使用它,而不是手动定义的数组) 1。使用php中手动定义的数组生成pptx 如果我使用以下数组作为数据源(如PhpPrese

我正试图使用Google Analytics作为数据源,用PHP以图表的形式动态生成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>
但是,生成的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字符串,然后是一个布尔值,告诉它是作为对象数组(
stdClass
)还是作为关联数组进行解码

如果您想要发布数据的关联数组,只需使用
json\u 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)
);
函数格式MarkersToData(标记){
var series2Data={};
对于(var i=0;i
这两个代码块所做的是循环数据,并根据
series2data
变量中所需的
date=>avgSessionDuration
格式设置索引和值。javascript使用一个对象来允许手动设置键

上面的javascript代码将允许您只使用
json\u解码($\u POST['markers'],true)
$series2Data
获取适当的关联数组。否则,在将消息传递给PhpPresentation之前,您将需要PHP代码来执行消息处理


这只取决于您希望在什么时候转换数据—在服务器上,还是在客户机上。如果这有点让人困惑,请告诉我。

一点也不让人困惑!你解释得很好。这看起来很合理,但我在阅读的所有关于php中数组的文档中都找不到合适的解决方案。当然,这是因为我没有在搜索中使用合适的关键字。我终于用php处理了这个数组,现在可以工作了!
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)
);