优定义网

Discuz 反序列化数组讲解

杨旭 发表于 2018-5-15 20:27:04 | 显示全部楼层 |阅读模式

先来实例解释一下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. ?>
复制代码

运行结果为:

1.png

序列化对应的函数为 serialize(), 反序列化对应的函数为:unserialize() 。

可以将前者序列化之后的数据存到数据库的某个字段中,使用时再通过反序列化处理。

那么,在Discuz中,我们通过一个实例来了解如何反序列化处理

以分类信息中上传图片字段为例。这个字段是采用先把内容包装到一个数组(内容包含图片的存储路径和这个图片的id),然后序列化保存在value字段中。如果我们只需要其中的图片路径。那么就需要对存入到value字段中的序列化数组进行反序列化。当然,这里需要注意的一个问题,如图:

2.png

在这里我们需要注意一个符号。反斜杠“\”。(猜测是因为编辑内容后生成的)。所以,在这里我们就需要多一道工序。

首先是查询数据库,这里忽略.....(所用的表是:pre_forum_typeoptionvar)

查询完,首先需要去掉反斜杠才能对数组反序列化处理。直接反序列化数组值是空。

第一步去掉反斜杠

  1. <!--{eval $value_1 = stripcslashes($value)}-->
复制代码

第二步反序列化数组

  1. <!--{eval $value_2 = unserialize($value_1)}-->
复制代码

这样,我们就得出了我们想要的数组:$value_2。打印出来后的结果为

3.png

当然 在这里我们不能直接使用$value_2,因为它还是一个数组,不能直接使用。如果我们需要上图中的图片路径,则直接使用$value_2[url]即可。

回复

使用道具 举报

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

本版积分规则

精华推荐
  • 一个人开始废掉的3种迹象

    一个人开始废掉的3种迹象

  • 从零到60秒的惬意冰镇啤酒

    从零到60秒的惬意冰镇啤酒

  • 马云、马化腾、王石都弃之不用的人,有一个共同点

    马云、马化腾、王石都弃之不用的人,有一个

  • 哥特式高迪凳子

    哥特式高迪凳子

  • 千亿小米,雷军逆袭

    千亿小米,雷军逆袭

  • 她一战赚了几十亿,她说:世界上最好的生意有三种

    她一战赚了几十亿,她说:世界上最好的生意有

  • 雷军:合伙人比制度更重要!

    雷军:合伙人比制度更重要!

  • 一个美美的令人喜欢的自行车铃

    一个美美的令人喜欢的自行车铃

QQ客服热线
QQ:1090281100 周一至周日:09:00 - 21:00
WeChat:dianlingkeji
Email:kaixin1069@vip.qq.com

优定义logo

勿要吝啬你无形资产,请为创新续源,知识、点子、灵感、经验、需求等均是创新源泉,你不经意的一句话将是另一个人的灵感。明天的明天,还有明天,我们应该把握今天,每一个今天,都有一个新的事物在出现,今天的漠视明天的落后,不浪费每一个学习的时刻,学习助力非凡。

技术支持 Discuz! X3.4 - 3.5 beta © 2001-2018 Comsenz Inc.

小黑屋|手机版|优定义 ( 粤ICP备16085288号-2 )|申请友链|网站地图

粤公网安备 44011102001144 号 GMT+8, 2018-10-19 01:11 , Processed in 0.092936 second(s), 29 queries .

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