2012-06-12 33 views
6

Tôi đang nén mảng bằng gzcompress (json_encode ($ arr), 9). Vì vậy, tôi chuyển đổi mảng thành chuỗi với json_encode và sau đó nén với gzcompress. Nhưng tôi không thể tìm thấy sự khác biệt nhiều trong kích thước của chuỗi kết quả. Trước kích thước nén là 488 KB và sau khi kích thước nén là 442 KB.Cách tốt nhất để nén chuỗi trong PHP

Có cách nào để tôi có thể nén thêm chuỗi không?

Xin cảm ơn trước.

Trả lời

10

Cách nén chuỗi của bạn sẽ phụ thuộc vào dữ liệu bạn muốn nén. Nếu nó bao gồm chủ yếu là dữ liệu ngẫu nhiên, bạn sẽ không đạt được nhiều cải tiến về kích thước. Có rất nhiều thuật toán đã được thiết kế để sử dụng cụ thể.

Bạn nên cố gắng xác định dữ liệu của bạn cần nén chủ yếu bao gồm và sau đó chọn nén thích hợp.

Vừa mới tôi chỉ có thể giới thiệu bạn đến bzcompress, bzip thường có tỷ lệ nén cao hơn gzip.

10

Không chắc số của bạn là đúng, tho bạn có thể sử dụng gzdeflate thay vì gzcompress vì gzcompress thêm 6 byte vào đầu ra, thêm 2 byte ở đầu và 4 byte phụ ở cuối.

Một thử nghiệm đơn giản cho thấy chuỗi được nén 1756800 len thành 99bytes bằng cách nén đôi, 5164byte nếu được nén một lần.

<?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)); 
?> 
Các vấn đề liên quan