其他人早在 07 年就遇到过这个问题,但没有得到解答:在 PHP 中,如果数组超过 6,670 行,json_encode($someArray) 会自动失败(返回 null)。有人有解决方法吗?例如,将数组的大小限制为 6600 会产生预期的结果。我可以使用部分数组执行多个 json 调用并连接结果,但这涉及一些时髦的字符串操作以使它们正确拼接在一起,我想避免这种情况。
最佳答案
您总是可以先将数组切片
分成两部分(假设它不大于这些行的两倍)。之后对其进行编码,然后再次将它们相加。如果这不是解决方案,您需要增加内存限制。
这里有一个例子,测试一下here .根据@GeertvanDijk 的建议,我将其设为灵活的功能,以增加功能!
<?php
$bigarray = array(1,2,3,4,5,6,7,8,9);
function json_encode_big($bigarray,$split_over = 6670){
$parts = ceil((count($bigarray) / $split_over));
$start = 0;
$end = $split_over;
$jsoneconded = [];
for($part = 0; $part < $parts; $part++){
$half1 = array_slice($bigarray,$start,$end);
$name = "json".$part;
$$name = ltrim(rtrim(json_encode($half1),"]"),"[");
$jsoneconded[] = $$name;
$start += $split_over;
}
return "[".implode($jsoneconded,",")."]";
}
print_r(json_encode_big($bigarray));
?>
我现在已经用超过 6,670 行的行进行了测试。可以在线测试here以及。
现在,我不得不提一下,我用一百万行测试了普通的 json_encode()
,没问题。然而,我仍然希望这能解决你的问题......
如果内存不足,您可以将
memory_limit
设置为更高的值。我建议不要这样做,而是分部分检索数据,然后分部分处理这些数据。由于我不知道您如何检索这些数据,因此我无法举例说明如何对其进行监管。这是在需要时更改内存的方法(有时它是唯一的选择,而且仍然“很好”)。
ini_set("memory_limit","256M");
这里是default的dubbel,在this documentation中可以看到是128M
关于php - json_encode 不会编码超过 6670 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817056/