gpt4 book ai didi

javascript - 将大型 PHP 数组拆分为用于 javascript 的较小块

转载 作者:行者123 更新时间:2023-11-30 10:25:48 25 4
gpt4 key购买 nike

我正在尝试创建一个数据分析门户,它允许我将我的一个表格导出为 CSV。我现在遇到的问题是,当用户选择大量数据时,它会失败,因为它已达到我的浏览器可用的 Javascript 变量的最大堆栈大小。 (如解释 here )。解决方案是将它们拆分成更小的 Javascript 数组 block ,然后再将它们连接起来。

我的问题

我有一个很大的 PHP 数组(可变大小,因为我不知道用户选择的范围),我需要将它们拆分成可变数量的 Javascript 数组,然后再将它们连接起来。我怎样才能做到这一点?

我的代码目前看起来像那样

<?php 
$array2 = getAllRawData($startDate, $endDate, $merchantID);
array_unshift($array2, ...TO ADD HEADER TO CSV....));
?>

// I am thinking some magic is supposed to happen here that splits my PHP array into smaller parts, assign them to javascript arrays and then concatenate them together into items2.

var items2 = <?php echo json_encode($array2);?>; // this is what I currently do but fails when the date range gets too wide.

var jsonObject2 = JSON.stringify(items2);
var csv2 = ConvertToCSV(jsonObject2);

a=document.createElement('a');
a.textContent='Download Raw Waiting Time Report';
a.download="RawWaitTime.csv";
a.href='data:text/csv;charset=utf-8,'+escape(csv2);
document.body.appendChild(a);

最佳答案

如评论中所述,最好用 PHP 构建 CSV。但是,要回答如何为 Javascript 拆分数组的问题,您可以使用窗口容器。但是,这意味着对象可能没有相同的 Javascript 限制,或者您链接到的帖子不准确。 (我不确定,因为我没有看到也没有测试过这个限制错误。)

http://jsfiddle.net/TYwY8/7/

<script>
var Array0 = ["1", "2", "3"];
var Array1 = ["4", "5", "6"];
var Array2 = ["7", "8", "9"];
var Array3 = ["10", "11", "12"];
var Array4 = ["13", "14", "15"];
var ArrayCount = 5;

for (var x = 0; x < ArrayCount; x++) {
console.log(window["Array" + x]);
}

</script>

您可以像这样通过 PHP 对这些数组进行切片:(未经测试)

<?php

$limit = 10000;
$arrayCount = count($array) % limit;

$offset = 0;
for ($x = 0; $arrayCount; $x++) {
echo "var MyArray{$x} = [" . implode(",", array_slice($array, $offset, $limit)) . "];";
$offset += $limit;
}

在不写入文件的情况下使用 fputcsv:

<?php

$file = fopen("php://output", "w");

$array = [ [ "1", "2", "3" ], [ "4", "5", "6" ], [ "7", "8", "9" ] ];

foreach ($array as $value) {
fputcsv($file, $value);
}

关于javascript - 将大型 PHP 数组拆分为用于 javascript 的较小块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com