[TOC]
## 概念
`serialize()` 函数将PHP值转为 一个包含字节流的字符串
`unserialize()` 函数将字节流的字符串变回php原来的值
## 实践
### PHP数组
```
<?php
$arr = [];
$arr['key'] = 'website';
$arr['value'] = 'www.baidu.com';
print_r($arr);
```
返回数组:
```
Array
(
[key] => website
[value] => www.baidu.com
)
```
### serialize() 序列化为字符串
```
<?php
$arr = [];
$arr['key'] = 'website';
$arr['value'] = 'www.baidu.com';
$a = serialize($arr);
echo $a;
```
返回数组:
```
a:2:{s:3:"key";s:7:"website";s:5:"value";s:13:"www.baidu.com";}
```
### unserialize() 反序列化为数组
```
$b = 'a:2:{s:3:"key";s:7:"website";s:5:"value";s:13:"www.baidu.com";}';
$c = unserialize($b);
print_r($c);
```
返回值 :
```
Array
(
[key] => website
[value] => www.baidu.com
)
```
## 对序列化字符串的说明
```
a:2:{s:3:"key";s:7:"website";s:5:"value";s:13:"www.baidu.com";}
```
对此我们可以将其分开
```
a:2:{}
s:3:"key"
s:7:"website"
s:5:"value"
s:13:"website"
```
从上我们可以看出,
1. `a` 代表 `array`数组,`2`代表数组长度,`{}` 很明显就是包含数组的内容
2. `s` 代表 `字符串`,`3`代表字符串的长度,`key`代表字符串
## 总结
```
a:2:{}
s:3:"key"
```
(字符串用分号隔开)
## 进阶
1、可序列化对象
![mark](http://qiniu.newthink.cc/blog/20171108-090540289.png)
![mark](http://qiniu.newthink.cc/blog/20171108-090549848.png)
2、可序列化字符串
![mark](http://qiniu.newthink.cc/blog/20171108-090600801.png)
![mark](http://qiniu.newthink.cc/blog/20171108-090610408.png)