php json编码和解码多维数组

时间:2013-08-24 01:04:50

标签: php multidimensional-array json

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

1 个答案:

答案 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

希望此错误消息可以帮助将来的某些人缩小错误范围。