2012-06-12 3 views
6

Я сжимаю массив с помощью gzcompress (json_encode ($ arr), 9). Итак, я преобразовываю массив в строку с json_encode, а затем сжимаю gzcompress. Но я не мог найти большую разницу в размере приведенной строки. Перед тем, как размер сжатия составляет 488 КБ, а после сжатия - 442 КБ.Лучший способ сжимать строку в PHP

Есть ли способ, которым я могу сжать строку дальше?

Заранее благодарен.

ответ

10

Насколько хорошо сжатие вашей строки зависит от данных, которые вы хотите сжать. Если он состоит в основном из случайных данных, вы не достигнете таких значительных улучшений в размере. Существует множество алгоритмов, разработанных для конкретного использования.

Вы должны попытаться определить, какие ваши данные для сжатия в основном состоят, а затем выберите надлежащее сжатие.

Как раз сейчас я могу ссылаться только на bzcompress, у bzip обычно высокие коэффициенты сжатия, чем gzip.

10

Я не уверен, что ваши номера правы, поэтому вы можете использовать gzdeflate вместо gzcompress, так как gzcompress добавляет 6 байт к выходу, 2 дополнительных байта в начале и 4 дополнительных байта в конце.

Простой тест показывает строку 1756800 len, сжатую до 99 бит, путем двойного сжатия, 5164 бит при сжатии один раз.

<?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)); 
?> 
Смежные вопросы