php json_encode 和解码多维数组

问题描述 投票:0回答:1

我有一个 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 文件大小大得多。

php multidimensional-array json
1个回答
0
投票

“问题”是由于 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

希望此错误消息能够帮助将来的人缩小错误范围。

© www.soinside.com 2019 - 2024. All rights reserved.