我用gzcompress压缩数组(json_encode($ arr),9)。 所以我使用json_encode将数组转换为字符串,然后使用gzcompress进行压缩。 但我发现结果字符串的大小差别不大。 在压缩大小为488 KB之前,压缩大小为442 KB之后。
有什么方法可以进一步压缩字符串吗?
提前致谢。
答案 0 :(得分:16)
我不确定你的数字是否正确,你可以使用gzdeflate而不是gzcompress,因为gzcompress会在输出中添加6个字节,在开头添加2个额外字节,在结尾添加4个额外字节。
一个简单的测试显示一个1756800 len字符串通过双重压缩压缩到99bytes,如果压缩一次则压缩为5164bytes。
<?php
$string = str_repeat('1234567890'.implode('', range('a', 'z')), 48800);
echo strlen($string); //1756800 bytes
$compressed = gzdeflate($string, 9);
$compressed = gzdeflate($compressed, 9);
echo '<br/>'.strlen($compressed).'<br/>';//99 bytes
echo gzinflate(gzinflate($compressed));
?>
答案 1 :(得分:14)
字符串的压缩程度取决于您要压缩的数据。如果它主要由随机数据组成,那么你将无法在尺寸方面取得如此大的进步。有许多算法专为特定用途而设计。
您应该尝试确定要压缩的数据主要包含哪些内容,然后选择适当的压缩。
刚才我只能推荐你bzcompress,bzip的压缩率通常比gzip高。