39、PHP 原生魅力 - 字符串 - 压缩字符串 & 解压缩字符串

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 179

时间: 2024-09-08 00:03:59

压缩内容:gzcompress()

如果你有一些字符串格式的内容,你可以尝试压缩它来保存空间(以字节为单位)。

例如,在执行序列化数组或大对象之后,你可能希望压缩获得的字符串以节省保存空间。

让我们试着这样做:

  • 定义一个数组
  • 将数组序列化为字符串
  • 压缩字符串

在序列化和压缩后,你可以检查字符串的大小,你会发现你可以节省保存 50% 的空间。

<?php

$array = [
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
];

$string =  serialize($array);
echo '序列化之后的大小:' . strlen($string) . PHP_EOL;
echo '压缩之后的大小:' . strlen(gzcompress($string)) . PHP_EOL;

输出如下:

$ php 39-gzcompress.php
序列化之后的大小:223
压缩之后的大小:106

可以设置压缩级别,从 0 到 9。

0 表示不压缩,9 表示最大压缩(较慢),默认值为 6。

解压缩字符串:gzuncompress()

要解压缩之前使用 gzcompress() 压缩的内容字符串,您可以使用 gzuncompress() 函数。

<?php

$array = [
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
];

$string =  serialize($array);
$compressed = gzcompress($string);
echo '序列化之后的大小:' . strlen($string) . PHP_EOL;
echo '压缩之后的大小:' . strlen(gzcompress($compressed)) . PHP_EOL;

// UNCOMPRESS,压缩字符串
$serialized = gzuncompress($compressed);
// UNSERIALIZE,获取初始数组
print_r(unserialize($serialized));

输出如下:

$ php 39-gzcompress.php
序列化之后的大小:223
压缩之后的大小:117
Array
(
    [0] => Array
        (
            [product] => Desk
            [price] => 200
        )

    [1] => Array
        (
            [product] => Chair
            [price] => 100
        )

    [2] => Array
        (
            [product] => Bookcase
            [price] => 150
        )

    [3] => Array
        (
            [product] => Door
            [price] => 100
        )

)
请登录后再评论