请选择 进入手机版 | 继续访问电脑版
查看: 60|回复: 0

PHP数组序列化函数serialize()和反序列化函数unserialize()详解

[复制链接]

595

主题

597

帖子

3065

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3065
发表于 2021-9-13 08:39:33 | 显示全部楼层 |阅读模式
PHP数组序列化函数serialize()和反序列化函数unserialize()详解
在使用Discuz开发“帖子文章语音阅读 3.5”插件时,遇到了一个问题,需要实现在某个版块开启“帖子语音阅读”功能,在“帖子文章语音阅读 3.5”插件-》设计-》变量中选择使用“版块多选(forums)”变量后,得到的是一个类似于a:1:{i:0;s:1:"2";}的字符串。
上面的a:1:{i:0;s:1:"2";}字符串就是一个使用PHP数组序列化函数serialize()“序列化”后的字符串,原来Discuz将插件-》设计-》变量中的“版块多选(forums)”序列化了,要想使用这个被“序列化”的变量,需要使用PHP反序列化函数unserialize(),进行反序列化。上面的这个版块多选(forums)”变量a:1:{i:0;s:1:"2";}反序列化的结果就是:
  1. Array
  2. (
  3.     [0] => 2
  4. )
复制代码
这个反序列化后的数组,结构就非常清楚了,再来使用这个数据判断哪个版块需要开启“帖子语音阅读”。大概实现的Discuz插件代码如下:
  1. global $_G;
  2. $autoset = $_G['cache']['plugin']['dz2k_yuedu'];
  3. $forumlist = unserialize($autoset['forumlist']);//反序列化数组
  4. $fid = $_G['forum']['fid'];//当前版块id
  5. if($autoset['forum'] == 1 && in_array($fid, $forumlist)){
  6.         include template('dz2k_yuedu:touch/audiojscss');//添加提示文字
  7.         return $audiobox.$jscss;
  8. }
复制代码

1、PHP数组序列化函数:serialize()的使用
  1. <?php
  2. $data=['PHP','HTML','Java','Python'];//中括号定义数组
  3. echo serialize($data);
  4. ?>
复制代码

在此创建一个简单的数组变量$data,然后使用serialize()函数对这个数组进行序列化操作。echo出来的结果如下:
  1. a:4:{i:0;s:3:"PHP";i:1;s:4:"HTML";i:2;s:4:"Java";i:3;s:6:"Python";}
复制代码
对这个使用PHP数组序列化函数serialize()序列化后的字符串数据进行解释,以便新手开发者对serialize()函数进行学习了解。
  1. a:表示整体的数据类型,这里是array;
  2. a:4中的4:表示数组元素的个数;
  3. i:表示int,整型;
  4. 0:表示数组元素的下标;
  5. s:表示string,即数组值的类型;
  6. s:3中3:表示数组值的长度。
复制代码
注:serialize()函数返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

2、PHP数组反序列化函数:unserialize()的使用
  1. <?php
  2. $data=['PHP','HTML','Java','Python'];//中括号定义数组
  3. $str=serialize($data);
  4. var_dump(unserialize($str));
  5. ?>
复制代码
输出结果如下:
  1. array(4) {
  2.         [0]=> string(3) "PHP"
  3.         [1]=> string(4) "HTML"
  4.         [2]=> string(4) "Java"
  5.         [3]=> string(6) "Python"
  6. }
复制代码
注意:unserialize()函数是对单一的PHP数组序列化函数serialize()已序列化的变量进行的反操作,将其转换回PHP数组类型的值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蓄财网 ( 豫ICP备2021002293号 )

GMT+8, 2021-9-26 12:30 , Processed in 0.103297 second(s), 35 queries .

蓄财网 ©版权所有

© 2021 蓄财网(www.aixc.cn)

快速回复 返回顶部 返回列表