Hi 您目前尚未登陆
请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

上官雨伦

2006年接触 Discuz。原 New.Discuz! Support Team 开发团队负责人,致力于网页前端设计。现职河北省张家口市职业技术学院教师。

Discuz 反序列化数组讲解 heatlevel

2018-01-16 04:56:58 发布

Php 1008 0 0

上官雨伦Writer

张家口市 | 博主、教师

90

主题

99

帖子

99

积分

Admin

Rank: 16

积分
99
发表于 2018-1-16 04:56 | 显示全部楼层 |阅读模式 [离线请留言]
先来实例解释一下PHP中的序列化数组
  1. <?php  
  2.     $arr = array('张三','李四');  //定义数组
  3.     $str = serialize($arr);  //这里是序列化$arr
  4.     echo $str."<br/><br/>";  
  5.     $new_arr = unserialize($str);  //这里是反序列化$str
  6.     print_r($new_arr);
  7. ?>
复制代码

运行结果为:
2.png


序列化对应的函数为 serialize(), 反序列化对应的函数为:unserialize()
可以将前者序列化之后的数据存到数据库的某个字段中,使用时再通过反序列化处理。

那么,在Discuz中,我们通过一个实例来了解如何反序列化处理
        以分类信息中上传图片字段为例。这个字段是采用先把内容包装到一个数组(内容包含图片的存储路径和这个图片的id),然后序列化保存在value字段中。如果我们只需要其中的图片路径。那么就需要对存入到value字段中的序列化数组进行反序列化。当然,这里需要注意的一个问题,如图:
1.png
在这里我们需要注意一个符号。反斜杠“\”。(猜测是因为编辑内容后生成的)。所以,在这里我们就需要多一道工序。
首先是查询数据库,这里忽略.....(所用的表是:pre_forum_typeoptionvar
查询完,首先需要去掉反斜杠才能对数组反序列化处理。直接反序列化数组值是空。
第一步去掉反斜杠
<!--{eval $value_1 = stripcslashes($value)}-->
第二步反序列化数组
<!--{eval $value_2 = unserialize($value_1)}-->

这样,我们就得出了我们想要的数组:$value_2。打印出来后的结果为
3.png
当然 在这里我们不能直接使用$value_2,因为它还是一个数组,不能直接使用。如果我们需要上图中的图片路径,则直接使用$value_2[url]即可。

0 使用道具 举报

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

当前话题还没有评论,来做第一个评论的人吧 ♪(^∇^*)