减少PHP数组的内存大小

时间:2016-09-01 23:43:52

标签: php arrays memory

我刚刚遇到了PHP数组大内存大小的问题。我试图在一堆小数组中为每个对象存储相当少量的数据。存储看起来像这样。

[Stats] => Array
     (
    [Apps] => Array
            (
                [Career] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

                [Team] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

                [Season] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

            )

    [SubApps] => Array
            (
                [Career] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

                [Team] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

                [Season] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                        [3] => 0
                        [4] => 0
                        [5] => 0
                    )

            )

我需要20个或更多这里显示的中间阵列(例如' Apps',' SubApps'等)。它是一个数组数组的数组,最终的数组总是正好是6个值。

由于它只有18个值,我认为它的内存不多,但我发现PHP每个值使用大约144个字节,所以它&#39结果是巨大的,特别是因为我有大约3000个这样的物体。它每个对象使用大约30k,仅使用20个这些数组块。

所以我正在寻找一种内存效率高的解决方案。由于我的最终数组总是6个值,我想我可以打包/打包。我也研究过SplFixedArray,但它在某些方面并不适合我的需求而且不会节省太多内存。我还希望在我的数据库中以可读格式显示值,以防我需要在db中手动编辑它们(我尝试保存内存的一种方法,但数据库中的值是乱码)。

更新 - 解决方案。我找到了一个简单的解决方案。数组是JSON_encode,用于保存到数据库。当我加载它们时,它们会被解码。最初我是一次解码整个批处理,因此大量使用内存,但简单的解决方案是保持编码直到需要,然后解码 - 处理 - 编码。这样,只有一个被解码到数组中,其余的仍然被编码,这似乎使用了非常少量的内存。

0 个答案:

没有答案