查看 453
回复 0
Discuz 插件开发中的数据序列化与反序列化 复制链接
发表于 2022-3-5 12:46:03 显示全部楼层 阅读模式 来自 中国四川绵阳
本帖最后由 逆风天 于 2022-3-5 12:53 编辑

Discuz 插件开发中的数据序列化与反序列化


需求:
插件中需要设置多个版块,然后前台再根据当前版块的fid对比设置的版块,判断当前版块是否是设置过的版块。

实现:
插件后台设置select多选模式,如下图

当设置好这个功能之后,多选,或者单选,都会自动序列化选中的数据,然后存入数据表。
而数据,看起来是这样


  

   

          
  1. a:4:{i:0;s:1:"2";i:1;s:2:"36";i:2;s:2:"37";i:3;s:2:"39";}

  2.    

  

  复制代码

问题:
当这条数据从数据库取出来再反序列化,就不会成功。
普通的反序列化


  

   

          
  1. $SetForums = unserialize($setting['q_and_a']);

  2.    

  

  复制代码

解决:
由于序列化数据存储引号,分号,culry括号,mysql需要自己保存,所以它会自动放入来自gpc_magic_quotes。因此,如果存储序列化数据并且想要使用它,则应在界面中使用html_entity_decode()以确保您具有PHP读取的实际格式。
看起来象这样


  

   

          
  1. $SetForums = unserialize(html_entity_decode($setting['q_and_a']));

  2.    

  

  复制代码

答案:
对比当前fid是否存在于设置的版块们中


  

   

          
  1. 1.php中判断
  2. if (in_array($_GET['fid'], $SetForums)) {
  3.   echo "当前版块在后台中已经设置了!";
  4. } else {
  5.   echo "未设置!";
  6. }

  7. 2.模板中判断
  8. {if (in_array($_GET['fid'], $SetForums))}
  9. 当前版块在后台中已经设置了!
  10. {else}
  11. 未设置!
  12. {/if}

  13.    

  

  复制代码

Have Fun!
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册

您需要登录后才可以回帖

登录

Or

立即注册

在线咨询 快速回复 返回列表