首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JavaScript阵列传递给PhpPresentation

将JavaScript阵列传递给PhpPresentation
EN

Stack Overflow用户
提问于 2015-12-11 21:41:28
回答 1查看 73关注 0票数 0

我正在尝试使用PhpPresentation以PowerPoint作为数据源,用PHP中的图表来生成PowerPoint演示文稿。

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

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

如果我使用以下数组作为数据源(如PhpPresentation文档中定义的),则生成的PowerPoint没有问题:

代码语言:javascript
复制
$series2Data = array('20151201' => 266.1, '20151202' => 198.5, '20151203' => 271.8);

2.使用Google 生成一个数组

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

代码语言:javascript
复制
[{"date":"20151201","avgSessionDuration":266.1},{"date":"20151202","avgSessionDuration":198.5},{"date":"20151203","avgSessionDuration":271.8}]

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

代码语言:javascript
复制
<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文件中,我添加了:

代码语言:javascript
复制
    $markers = json_decode($_POST['markers']);
    $series2Data = $markers;

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

然而,我的数组在PHP方面的知识不如在JavaScript中的那么好。

我如何转换一个数组,它的var_dump看起来像

代码语言:javascript
复制
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点所描述的那样变成数组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 22:29:59

首先,json_decode采用可选的第二个参数。首先,您希望解码的json字符串和第二个布尔值,它告诉它是作为对象数组(stdClass)还是作为关联数组进行解码。

如果您希望发布数据的关联数组,只需使用json_decode($markers, true)即可。

但是,您所要求的格式将不会由此提供。因此,您需要在javascript或php中对一些数据进行按摩。

下面是用来转换它的php代码:

代码语言:javascript
复制
$series2Data = [];
$markers = json_decode($_POST['markers'], true);

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

Javascript:

代码语言: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)
);

这两个代码块所做的是对数据进行循环,并根据date => avgSessionDuration变量中所需的series2data格式设置索引和值。javascript使用对象允许手动设置键。

然后,上面的javascript代码将允许您只使用json_decode($_POST['markers'], true);为您的$series2Data获取适当的关联数组。否则,您将需要PHP代码在将其传递给PhpPresentation之前执行传递。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34233010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档