我有一个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
希望这个错误消息能帮助将来的一些人缩小错误范围。