Chr*_*ris 2 php compression arrays encoding
我有一个数组包含值1或0表示真或假值.例如
array(1,0,0,1,0,1,1,1,1);
Run Code Online (Sandbox Code Playgroud)
我想将此数组压缩/编码为可能的最短字符串,以便它可以存储在空间受限的位置,例如cookie.它还需要能够在以后再次解码.我该怎么做?
PS.我在PHP工作
这是我的建议:
$a = array(1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1);
$compressed = base64_encode(implode('', array_map(function($i) {
return chr(bindec(implode('', $i)));
}, array_chunk($a, 8))));
var_dump($compressed); // string(8) "l8vlBw=="
Run Code Online (Sandbox Code Playgroud)
所以你得到每个8个字符(实际上是二进制0..255),将它们转换为整数,表示为ASCII字符,将其内嵌到字符串并转换为base64以便能够将其保存为字符串.
UPD:
相反的是非常简单:
$original = str_split(implode('', array_map(function($i) {
return decbin(ord($i));
}, str_split(base64_decode($compressed)))));
Run Code Online (Sandbox Code Playgroud)
我是怎么写的(以防万一有人如何编写这样难以理解且几乎无法维护的代码):
我写了$original = $compressed;并开始逐步颠倒这个表达式的右边部分:
| 归档时间: |
|
| 查看次数: |
2150 次 |
| 最近记录: |