1.序列化

在 PHP 中,通过 serialize() 序列化函数,可以将对象或数组转换为字符串。
语法格式:
string serialize(对象或数组)
第二章第二节 - 图1示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("userName"=>"张三","sex"=>"男","age"=>15);
  4. $str=serialize($arr);
  5. echo$str;

第二章第二节 - 图2代码讲解
1、序列化
$str = serialize($arr);
通过 serialize() 函数,将 $arr 数组转换为一个字符串。

2.反序列化

在 PHP 中,通过 unserialize() 函数,可以将序列化的字符串进行反序列化,并返回原始的对象结构。
语法格式:
mixed unserialize(序列化的字符串)
第二章第二节 - 图3示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr=array("userName"=>"张三","sex"=>"男","age"=>15);
  4. $str=serialize($arr);
  5. $newArr=unserialize($str);
  6. print_r($newArr);

第二章第二节 - 图4代码讲解
1、反序列化
$newArr = unserialize($str);
通过 unserialize() 函数,将序列化的字符串 $str 转换为原来的数组。

3.老师补充:

3.1序列化案例

  1. 序列化原理
  2. ```php
  3. <?php
  4. function mySerialize($data){
  5. $s = ";";
  6. // 用来保存序列化字符串的变量
  7. $retS = "";
  8. // 获取类型
  9. $t = gettype($data);
  10. // 根据不同的类型进行不同形式的拼接
  11. switch($t){
  12. // 整数类型
  13. case "integer":
  14. $retS .= "i:" . $data;
  15. break;
  16. // 小数类型
  17. case "double":
  18. $retS .= "d:" . $data;
  19. break;
  20. // 布尔类型
  21. case "boolean":
  22. $v = $data?"1":"0";
  23. $retS .= "b:" . $v;
  24. break;
  25. // 字符串类型
  26. case "string":
  27. $l = strlen($data);
  28. $retS .= "s:{$l}:" . "\"$data\"";
  29. break;
  30. // 数组类型
  31. case "array":
  32. $retS .= "a:" . count($data) . ":{";
  33. foreach ($data as $key => $value) {
  34. $retS .= mySerialize($key);
  35. $retS .= mySerialize($value);
  36. }
  37. $retS .= "}";
  38. // 数组后面不拼接分号
  39. $s = "";
  40. break;
  41. }
  42. return $retS . $s;
  43. }
  44. echo mySerialize(100) . "<br>"; //i:100;
  45. echo mySerialize(3.14) . "<br>"; //d:3.140000000000000124344978758017532527446746826171875;
  46. echo mySerialize(true) . "<br>"; //b:1;
  47. echo mySerialize(false) . "<br>"; //b:0;
  48. echo mySerialize("hello") . "<br>"; //s:5:"hello";
  49. // 序列化复杂数组
  50. $animals = ["chicken", "duck", "goose",'dog','pig',100,3.14,true,[1,2,3]];
  51. $aniStr = mySerialize($animals);
  52. echo $aniStr;
  53. echo "<hr>";
  54. ?>
  1. 3.2反序列化
  2. ```php
  3. - 序列化数据
  4. ```php
  5. i:100;
  6. d:3.14;
  7. b:1;
  8. b:0;
  9. s:5:"hello";
  10. a:9:{i:0;s:7:"chicken";i:1;s:4:"duck";i:2;s:5:"goose";i:3;s:3:"dog";i:4;s:3:"pig";i:5;i:100;i:6;b:1;i:7;a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}i:8;s:3:"php";}
  • 反序列化

    1. <?php
    2. $file = fopen("test.txt","r");
    3. do{
    4. $content = fgets($file);
    5. $data = unserialize($content);
    6. var_dump($data);
    7. }while($content);
    8. fclose($file);
    9. echo "<hr>";

    ```