其他人在07年有过这个问题,但它没有得到回答:在PHP中,如果数组有超过6,670行,json_encode($ someArray)默默地失败(返回null)。有人有解决方法。例如,将数组的大小限制为6600可以产生预期的结果。我可以做一些使用部分数组执行多个json调用并将结果连接起来,但这涉及到一些时髦的字符串操作以使它们适当地缝合在一起,我想避免这种情况。json_encode不会编码超过6670行
回答
可能取决于你的PHP版本,并允许使用的PHP内存(和可能也是数组中所有数据的实际大小)。 如果一切都失败了,你可以做什么,是这样的: 编写一个函数,检查给定数组的大小,然后拆分一个小部分进行编码,然后继续这样做直到所有部分都被编码,然后再次加入它们。如果这是你最终选择的路线,请对这个答案发表评论,也许我可以帮你解决。 (这是由Nytrix基于答案) 编辑,下面的例子:
function encodeArray($array, $threshold = 6670) {
$json = array();
while (count($array) > 0) {
$partial_array = array_slice($array, 0, $threshold);
$json[] = ltrim(rtrim(json_encode($partial_array), "]"), "[");
$array = array_slice($array, $threshold);
}
$json = '[' . implode(',', $json) . ']';
return $json;
}
干杯!虽然我认为选择for循环而不是我的while-whack仍然更好一些。计数在一段时间循环只是感觉肮脏我猜^^ –
短而甜。我喜欢。我还没有测试过,但我认为它可能会省略“块”之间的逗号。 (如果是这样,容易修复)再次感谢。 –
我现在已经测试了这段代码,它并没有抛出有效的'json',也没有其他东西......测试它[** here **](http://sandbox.onlinephpfunctions.com/code/58cecc502255d0800d742bf9e02e65208b73d47b)在线 – Nytrix
你总是可以将第一个slice
数组分成2个部分(假设它不大于那些行的2倍)。之后对它进行编码,并再次将它们相加。如果这不是解决方案,则需要增加内存限制。
这里是一个例子,测试它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");
在这种情况下,它是从默认的杜贝尔,你可以看到它是128M
在this documentation
- 1. json_encode超过2个阵列
- 2. PHP json_encode对函数进行编码
- 3. Woocommerce栏不会超过2行吗?
- 4. PHP json_encode编码口音的话
- 5. JSON_ENCODE无法编码大数组
- 6. Json_Encode不返回HTML,即使我尝试编码JSON_HEX_QUOT | JSON_HEX_TAG
- 7. php json_encode不会返回任何东西
- 8. Hamcrest的每种不超过不编译
- 9. 错误#2084-参数的AMF编码不能超过40K
- 10. 码头不会删除超时会议,如果会议在运行时
- 11. Java代码不会编译
- 12. 代码不会编译?
- 13. Qt OpenCV Android代码不会超越capture.grab()
- 14. iPad的UIPopoverController不会超过UITextView的inputView
- 15. AlarmManager不会超过一个队列Android
- 16. LD_LIBRARY_PATH不会超过一个路径
- 17. Javascript计数器不会超过1
- 18. drawLine不会画线超过BufferedImage
- 19. 会话不超过一小时有效
- 20. VBScript不会超过if语句
- 21. SQL Server中的表不会返回超过几千行
- 22. MYSQL我怎样才能确保行不会超过一次?
- 23. HTML表格导出为CSV不会导出超过50行
- 24. 什么会导致phpmyadmin不能显示超过30行?
- 25. strcmpi代码不会编译,但strcmp会?
- 26. HttpUtility.HtmlDecode不能解码ASCII超过127
- 27. 如何执行一段代码不超过每X分钟?
- 28. 从php json_encode到jquery解码
- 29. 会编码吗?
- 30. PHP会话超过2页
你能提供的演示发生这种情况时如何和PHP代码最小的例子吗? – Pete
你有没有尝试过增加PHP的内存限制? – AmericanUmlaut
你检查了最大深度吗? –