phpjsonencode-and-decode多维数组


php json_encode and decode multi-dimension array

我有一个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将数组保存到文本文件中,并使用unserialize返回数组形式。不幸的是,序列化的数组变得非常大,但主要是由于序列化时的浮点(bug或设计)转换。例如,序列化进程将.333转换为.33333333333333333,而不是0.333。这让我想切换到json_encode来保存数组。当将serialize与json_encode进行比较时,序列化文件的大小为40MB,而json_encod的大小为8MB。

这太好了,只是当我尝试json_decode文件时,它不再是数组形式。我尝试了json_decode($array,true),但也不起作用。

你知道如何让json_encode为这个例子工作吗?

TIA-

PS,我的浮点数是通过四舍五入小数生成的。我在StackO上找到的另一个答案建议,不要使用round($part/$sum, 3);,而是使用sprintf('%.3f', $part/$sum);,它将浮点转换为字符串。仅此一项就将序列化文件从40MB减少到19MB,但它仍然比json_encode文件大小8MB大得多。

"问题"是由于json_decode无法读取大型json_encode文件。可以工作的最大json文件只有大约.5MB。在4GB Ram、4核Xeon服务器和4GB localhost笔记本电脑上测试。我还将php.ini文件中的memory_limit设置为其他php例程的3GB(是的,3GB),并重新启动了apache。因此,memory_limit设置似乎不是问题所在。

错误消息没有帮助,它指出

警告:array_slice()要求参数1为数组,在第xx行的/home/xxxxxx/public_html/xxxxx.php中给定null

希望这个错误消息能帮助将来的一些人缩小错误范围。