在PHP中压缩字符串的最佳方法

16

我正在使用gzcompress(json_encode($arr),9)来压缩数组。 因此,我将数组转换为字符串,并使用json_encode进行压缩。 但我发现压缩后的字符串大小并没有太大的差异。 压缩前大小为488 KB,压缩后大小为442 KB。

是否有任何方法可以进一步压缩字符串?

提前致谢。

2个回答

26

我不确定你的数字是否正确,但你可以使用gzdeflate代替gzcompress,因为gzcompress会在输出中添加6个字节(2个额外字节在开头和4个额外字节在结尾)。

一个简单的测试显示,将长度为1756800的字符串双重压缩后压缩到99个字节,如果只压缩一次,则需要5164个字节。

$string = str_repeat('1234567890' . implode('', range('a', 'z')), 48800);

echo strlen($string); //1756800 bytes

$compressed = gzdeflate($string,  9);
$compressed = gzdeflate($compressed, 9);

echo strlen($compressed); //99 bytes

echo gzinflate(gzinflate($compressed));

20

你的字符压缩效果好不好,取决于要压缩的数据。如果数据主要是随机数据,压缩后的大小不会有太大改善。有许多算法被设计用于特定情景。

你应该尝试确定你要压缩的数据主要由什么组成,然后选择适当的压缩方法。

目前我只能为你提供bzcompress,bzip通常具有比gzip更高的压缩率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接