Я сжимаю массив с помощью gzcompress (json_encode ($ arr), 9). Поэтому я преобразовываю массив в строку с json_encode, а затем сжимаю gzcompress. Но я не мог найти большой разницы в размере приведенной строки. До сжатия размер составляет 488 КБ, а после сжатия – 442 КБ.
Есть ли способ сжать строку дальше?
Заранее спасибо.
Насколько хорошо сжатие вашей строки будет зависеть от данных, которые вы хотите сжать. Если он состоит в основном из случайных данных, вы не достигнете таких значительных улучшений в размере. Существует множество алгоритмов, разработанных для конкретного использования.
Вы должны попытаться определить, что ваши данные для сжатия в основном состоят из и затем выберите надлежащее сжатие.
Только сейчас я могу ссылаться только на bzcompress , bzip обычно имеет более высокие коэффициенты сжатия, чем gzip.
Я не уверен, что ваши номера правы, но вы можете использовать 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)); ?>