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

Gist

    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;
   }

你可能感兴趣的:(PHP数据的序列化/反序列化)