**
php中序列化和反序列化函数在快照中的使用
**
1.序列化函数
string serialize(mixed $value)
2.反序列化函数
mixed unserialize ( string $str )
简单例子:
$arr = array(
array('name'=>'张三','age'=>18),
array('name'=>'李四','age'=>21),
array('name'=>'王武','age'=>17));
dump(serialize($arr));
/**
结果:
string(153) "a:3:{i:0;a:2:{s:4:"name";s:6:"张三";s:3:"age";i:18;}i:1;a:2:{s:4:"name";s:6:"李四";s:3:"age";i:21;}i:2;a:2:{s:4:"name";s:6:"王武";s:3:"age";i:17;}}"
**/
dump(unserialize(serialize($arr)));
/**
结果:
array(3) {
[0] => array(2) {
["name"] => string(6) "张三"
["age"] => int(18)
}
[1] => array(2) {
["name"] => string(6) "李四"
["age"] => int(21)
}
[2] => array(2) {
["name"] => string(6) "王武"
["age"] => int(17)
}
}
**/
所谓快照就是把当时的数据信息做一个留存,如果以后发生变化就可以拿出当时的留存作为凭证。在商品限时优惠活动中会用到。
具体来说,针对同一件商品,用户在商家搞活动时下单,就把商品的优惠信息进行记录,假如存在条件优惠活动时购买不可以退换,现在已经过了优惠活动的,现在下单的用户就可以拥有退换服务,优惠活动期间下单的用户就不存在退换服务,依据就是用户下单时的快照留存。
实际应用:
/**
* 设置订单快照
* @param string $params
* @return $this
*/
public function setParams($params) {
$this->params = is_array($params) ? $params : array();
return $this;
}
/**
数据解析
*/
$r['shop'] = unserialize($r['params']);
$r['shop_name'] = $r['shop']['titles'];
$r['shop_image_url'] = $r['shop']['image_url'];
这样,即使商家删除了商品信息也不会受到影响。