php - json_encode 不会编码超过 6670 行

标签 php json

其他人早在 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/

相关文章:

json - 如何使用 Laravel response()->json() 返回空对象而不是空数组

json - 如何在Logstash中过滤具有相同名称的多个字段?

php - 数据库凭证安全性 - 存储在 PHP 中还是通过邮件传递?

php - 将图像上传到文件夹中

php - 检查 $_REQUEST 变量的更好方法

javascript - 如何在另一个页面显示componentDidMount获取数据?

ios - 如何从 API 添加标志图像?

php - 从服务器上每个数据库的一个表中选择数据

php - 将 url 与字符串分开?

ruby-on-rails - 如何在 Rails 中 POST/PUT 数组参数