PHP数据的序列化/反序列化
最近在接触一个叫做medoo的mysql框架,这个框架有一个特点,在insert/update时,如果你给进的数据是array的话会自动转成序列化字符串,说实话这个东西以前还没怎么接触过,索性去搜索了一下
其实这个和json几乎是差不多的用途,只是json显得更加标准,和json的json_encode、json_decode这两个函数类似,php也提供了两个类似的函数——serialize()和unserialize()这两个函数,用法很简单,下面举个例子说明
<?php
$data = array('key' => 'value');
var_dump(serialize($data));
输出
string(28) "a:1:{s:3:"key";s:5:"value";}"
下面我们把这段输出的字符串喂回unserialize()
<?php
var_dump(unserialize('a:1:{s:3:"key";s:5:"value";}'));
输出
array(1) {
'key' =>
string(5) "value"
}
判断指定字符串是否为序列化后的字符串
由于medoo的缺陷,他如果读取回数据库的序列化字符串并不能自动的转换为数组,所以我们需要一个判断指定字符串是否为序列化字符串的函数
转载自http://www.thinkphp.cn/code/7.html
function is_serialized( $data ) {
$data = trim( $data );
if ( 'N;' == $data )
return true;
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
return false;
switch ( $badions[1] ) {
case 'a' :
case 'O' :
case 's' :
if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
return true;
break;
case 'b' :
case 'i' :
case 'd' :
if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
return true;
break;
}
return false;
}

浙公网安备 33010602011771号