我有一个 php 数组结构
Array
(
[car] => Array
(
[red] => 0.333
[orange] => 0.333
[blue] => 0.333
)
[truck] => Array
(
[white] => 0.333
[green] => 0.333
[blue] => 0.333
)
)
我一直在使用序列化将数组保存到文本文件,并反序列化以恢复数组形式。不幸的是,序列化数组变得非常大,但这主要是由于序列化时的浮点(错误或设计)转换所致。例如,序列化进程将 0.333 转换为 0.333,而不是 0.333。3333333333333333333333333333333333333333333333333。这让我想切换到 json_encode 来保存数组。将序列化与 json_encode 进行比较时,序列化文件的大小为 40MB,而 json_encode 的序列化文件大小为 8MB。
那太好了,除了当我尝试对文件进行 json_decode 时,它不再是数组形式。我尝试了 json_decode($array, true),但这也不起作用。
如何让 json_encode 适用于此示例?
PS,我的浮点数是通过四舍五入生成的。我在 Stack Overflow 上找到的另一个答案建议不要使用
round($part/$sum, 3);
,而使用 sprintf('%.3f', $part/$sum);
将浮点转换为字符串。仅此一项就将序列化文件从 40MB 减少到 19MB,但它仍然比 8MB 的 json_encode 文件大小大得多。
“问题”是由于 json_decode 无法读取大的 json_encode 文件。可以工作的最大 json 文件只有 ~.5MB。在 4GB RAM、4 核 Xeon 服务器以及 4GB 本地主机笔记本电脑上进行了测试。我还在 php.ini 文件中将其他 php 例程的内存限制设置为 3GB(是的,3GB)并重新启动了 apache。所以内存限制设置似乎不是问题。
错误消息没有帮助,它指出
警告:array_slice() 期望参数 1 为数组,在 /home/xxxxx/public_html/xxxx.php 第 xx 行给出 null
希望此错误消息能够帮助将来的人缩小错误范围。