2012-06-12 73 views
6

我用gzcompress(json_encode($ arr),9)壓縮數組。 因此,我將數組轉換爲json_encode的字符串,然後使用gzcompress進行壓縮。 但我找不到結果字符串的大小差異。 在壓縮大小爲488 KB之前和壓縮大小爲442 KB之前。在PHP中壓縮字符串的最佳方法

有沒有什麼辦法可以進一步壓縮字符串?

在此先感謝。

回答

10

您的字符串的壓縮效果會有多好取決於您要壓縮的數據。如果它主要由隨機數據組成,則不會在規模上取得如此大的改進。有許多算法是針對特定用途而設計的。

您應該嘗試確定要壓縮的數據主要由哪些部分組成,然後選擇適當的壓縮。

剛纔我只能推薦你bzcompress,bzip的壓縮率通常比gzip高。

10

我不確定你的數字是否正確,你可以使用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)); 
?>