我有一个php数组结构
Array
(
[car] => Array
(
[red] => 0.333
[orange] => 0.333
[blue] => 0.333
)
[truck] => Array
(
[white] => 0.333
[green] => 0.333
[blue] => 0.333
)
)
我一直在使用serialize将数组保存到文本文件中,并反序列化以返回数组表单。不幸的是,序列化数组变得非常大,但主要是由于序列化时的浮点(错误或设计)转换。例如,序列化过程将.333转换为.3333333333333333333333333333333333333333333333333,而不是0.333。这让我想切换到json_encode来保存数组。比较serialize和json_encode时,序列化文件的大小为40MB,而json_encode的大小为8MB。
这很好,除非我尝试json_decode文件,它不再是数组形式。我尝试了json_decode($ array,true),但这也不起作用。
知道如何让json_encode适用于这个例子吗?
TIA
PS,我的浮点数是通过舍入小数生成的。我在StackO上发现的另一个答案是,使用round($part/$sum, 3);
代替使用sprintf('%.3f', $part/$sum);
,将浮点转换为字符串。仅此一项就将序列化文件从40MB减少到19MB,但它仍然远大于8MB的json_encode文件大小。
答案 0 :(得分:0)
'问题'是由于json_decode无法读取大型json_encode文件。可以工作的最大json文件只有〜。5MB。测试了4GB Ram,4核Xeon服务器以及4GB localhost笔记本电脑。我还在php.ini文件中将memory_limit设置为3GB用于其他php例程(是的,3GB)并重新启动apache。所以memory_limit设置似乎不是问题。
错误消息无效,它声明
警告:array_slice()期望参数1为数组,在xx行/home/xxxxx/public_html/xxxx.php中给出为null
希望此错误消息可以帮助将来的某些人缩小错误范围。