串行化大概就是把一些变量转化成为字符串的字节流的形式,这样比较容易传输、存储。当然,关是传输存储没有什么,关键是变成串的形式以后还能够转化回来,而且能够保持原来数据的结构。

在PHP中有多串行化处理的函数:serialize(),该函数把任何变量值(除了资源变量)转化为字符串的形式,可以把字符串保存到文件里,或者注册为Session,乃至于使用curl来模拟GET/POST来传输变量,达到RPC的效果。

如果要将串行化的变量转化成PHP原始的变量值,那么可以使用unserialize()函数。

一、变量串行化

我们举简单的例子来说明串行化,以及它的存储格式。

整型:

以下为引用的内容:

$var = 23;

echo serialize($var);

输出:

i:23;

浮点型:

以下为引用的内容:

$var = 1.23;

echo serialize($var);

输出:

d:1.229999999999999982236431605997495353221893310546875;

字符串:

以下为引用的内容:

$var = "This is a string";

echo serialize($var);

$var = "我是变量";

echo serialize($var);

输出:

s:16:"This is a string";

s:8:"我是变量";

布尔型:

以下为引用的内容:

$var = true;

echo serialize($var);

$var = false;

echo serialize($var);

输出:

b:1;

b:0;

上面这些基本类型串行化之后的情况很清楚,串行化之后的存储格式是:

变量类型:[变量长度:]变量值;

就是第一位字符代表变量类型,第二个:代表分割,变量长度是可选的,就是在字符串类型里有,其他类型没有,最后一个就是变量值,每个串行化的值以";"作为结束。

比如我们整型数字23串行化之后就是:i:23,那么它没有长度,只有类型和变量值,i代表integer,通过冒号分割,后面保存的是整型值23,包括浮点型(双字节型)也是一样。布尔型的话,类型是b(boolean),如果是true的话,那么串行化的值是1,如果是false那么值就是0。字

符串值话中间会多一个保存的值得,保存字符串的长度值,比如字符串"This is a string",那么生成的串行化的值是 s:16:"This is a string"; s是string,代表类型,中间的16就是该字符串的长度,如果是中文的话,那么每个中文是两个字符来保存的,比如字符串 "我是变量",生成的串行化值是:s:8:"我是变量"; 就是8个字符的长度。

下面我们重点来讲一下数组变量串行化。

数组变量:

以下为引用的内容:

$var = array("abc", "def", "xyz", "123");

echo serialize($var);

输出:

a:4:{i:0;s:3:"abc";i:1;s:3:"def";i:2;s:3:"xyz";i:3;s:3:"123";}

就是把我的数组 $var 串行化得到的字符串值,我们的$var数组包括4个字符串元素,分别是"abc", "def", "xyz", "123",我们来分析一下串行化后的数据,为了简便起见,我们把串行化的数据列成数组的样式:

以下为引用的内容:

a:4:

{

i:0;s:3:"abc";

i:1;s:3:"def";

i:2;s:3:"xyz";

i:3;s:3:"123";

}

这样排列就比较清晰了,看开始的字符串:a:4:{...} 首先第一个字符a保存的是变量类型是array(数组)类型,第二个 4 保存的是数组元素的个数,一共有4个,然后在{}之间数组元素的内容。比如第一个数组元素:i:0;s:3:"abc"; i代表是当前数组元素的索引值类型是整型,并且值是 0,元素值的类型是s(字符串的),个数是 3 个,具体值是"abc",分号结束,下面的数组元素依次类推。

我们再看看使用字符串做为元素索引会如何:

以下为引用的内容:

$var = array("index1"=>"abc", "index2"=>"def", "index3"=>"xyz", "index4"=>"123");

echo serialize($var);

输出:

a:4:{s:6:"index1";s:3:"abc";s:6:"index2";s:3:"def";s:6:"index3";s:3:"xyz";s:6:"index4";s:3:"123";}

变成数组样式后:

以下为引用的内容:

a:4:

{

s:6:"index1";s:3:"abc";

s:6:"index2";s:3:"def";

s:6:"index3";s:3:"xyz";

s:6:"index4";s:3:"123";

}

php 串行化数据,PHP中的串行化变量和序列化对象相关推荐

  1. 删除数据表中的重复行

    原表数据 select subscrbid, prcplnid,min(begtime),min(endtime),count(*) from NEW_TRAIN_TAB_SUBSCRBPRCPLN ...

  2. 重做实验七 寻址方式在结构化数据访问中的应用

    先处理第一行所有数据: ;实验七 寻址方式在结构化数据访问中的应用;编程 将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整) ;结果也按照下面的格式保存在table ...

  3. 实验七 寻址方式在结构化数据访问中的应用

    下面的程序中,已经定义好了这些数据 ;实验七 寻址方式在结构化数据访问中的应用;编程 将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整) ;结果也按照下面的格式保存 ...

  4. 解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用

    原文: 汇编语言-(第三版) 王爽-著 (实验七) 寻址方式在结构化数据访问中的应用 https://www.52pojie.cn/thread-1241289-1-1.html (出处: 吾爱破解论 ...

  5. 在数据框中采样随机行

    本文翻译自:Sample random rows in dataframe I am struggling to find the appropriate function that would re ...

  6. 什么是结构化数据?什么是半结构化数据?

    概述 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档.文本.图片.XML.HTM ...

  7. 什么是结构化数据?什么是半结构化数据?(*)

    概述 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档.文本.图片.XML.HTM ...

  8. php 串行化数据,php中对象的串行化

    我们大家有知道PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据.文章这里就PHP串行化为大家详细的介绍.你在 ...

  9. Layui数据表格中动态插入行插入下拉框

    想要在已加载的layui数据表格动态的插入一行,首先要在加载表格的时候设置它的event值.因为我这里是点击序号就添加一行,所以我在序号中设置了它的event值!当然在静态表格当中也是一样的操作,在你 ...

最新文章

  1. Android 调试工具集合
  2. spark读取csv转化为rdd(python+scala+java三种代码汇总)
  3. jmc线程转储_使线程转储智能化
  4. C memset 踩坑
  5. python 多文件知识
  6. 本地缓存之Guava简单使用
  7. PL/SQL面向过程语言
  8. 如何批量修改网页 更新网站 一键保存 windows查看和排序
  9. lightgbm algorithm case of kaggle(上)
  10. Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作
  11. 艾伦·图灵——如谜的解谜者
  12. 磁盘阵列服务器上创建虚拟机,UNRAID下虚拟机搭建单机游戏教程
  13. 逻辑上的“谬误”真的是我们应该所认为的错误吗?
  14. 仿百思不得其姐项目开发(粗略笔记,后期规范排版和更新)
  15. JavaScript 实现抢购倒计时,记录恋爱1314纪念日倒计时,输出对应的天数小时分钟秒数
  16. English--辅音
  17. n的阶乘怎么用计算机语言表示,python中阶乘的表示方法
  18. 用html做简单课程表
  19. 浅谈互联网DD攻击和CC攻击
  20. node版本管理工具nvm

热门文章

  1. python主要用于做什么-python主要用于哪些方向
  2. 3,进程间通信IPC机制,线程,线程通信,互斥锁
  3. iOS获取设备UUID和IDFA
  4. [Swift]LeetCode268. 缺失数字 | Missing Number
  5. ECMAscript6(ES6)新特性语法总结(一)
  6. 让UpdatePanel支持上传文件:解决当页面显式设置document.domain时提示的500错误
  7. 深度学习——用softmax函数来规范可变参数
  8. 怎样用shell计算linux内存,计算Linux内存,CUP,硬盘使用率的shell脚本
  9. oracle数据如何导入hadoop,hadoop hive 与 Oracle 互相导入数据
  10. PAT乙级(1023 组个最小数)