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,而是将 .333 转换为 .3333333333333333333333333333333333333333333333333。这让我想切换到 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,但它仍然比 json_encode 文件大小 8MB 大得多。

4

1 回答 1

0

The 'problem' is due to json_decode inability to read large json_encode files. The largest json file that can work is only ~.5MB. Tested on 4GB Ram, 4 core Xeon server, and also 4gb localhost laptop. I also had set memory_limit in the php.ini file to be 3GB for other php routines (yes, 3GB) and restarted apache. So the memory_limit setting appears not to be the problem.

Error message was not helpful, it stated that

Warning: array_slice() expects parameter 1 to be array, null given in /home/xxxxx/public_html/xxxx.php on line xx

Hopefully this error message would help some person in the future to narrow down the bug.

于 2013-08-24T02:39:43.767 回答