Blogger Information
Blog 27
fans 0
comment 0
visits 43701
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
mysql数据库存储PHP数组、对象的方法
xingzhi的博客
Original
1327 people have browsed it

之前开发项目时遇到了一个难点,就是如何把多维数组数据存入mysql数据库中,因为mysql数据库是不支持数组存储的,所以当时我的方法是通过容易拆分的标识符,比如@或者&这些,可能用户输入时很少用到的特殊字符,然后通过  impload()   函数将他们组合起来,等到取出时再用  expload()  函数将他们拆分,一维数组用一个标识符、组合一次、取出时拆分一次,二维数据用两个标识符、组合两次、取出时拆分两次,以此类推,让人都觉得繁琐。

  但现实总是山重水复疑无路,柳暗花明又一村,一次偶然的机会,发现了一个函数serialize()序列化和他的相对函数unserialize()反序列化。

  查一下手册,函数描述是serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。

  重点是返回字符串,因为MySQL是可以存储字符串类型的。那么我们开始动手吧!
  首先找一个数组来:

<?php
$a = array(
       ‘aa’ => 11,
       ‘bb’ => 22,
       ‘cc’ => array(
           ‘aaa’ => 111,
           ‘bbb’ => 222,
           ‘ccc’ => 333,
           ),
       ‘dd’ =>44
   );
echo ‘<pre>‘;
var_dump($a);
echo ‘</pre>‘;
?>
输出如下

1.jpg


可以了,一个二维数组写好了,然后我们就要开始使用serialize()了,怎么用,我们再看下手册
timg.jpg

只有一个参数,那么传值进去就可以直接用了,返回的是一个string类型的值。

$b = serialize($a);
echo “<pre>“;
var_dump($b);
echo ‘</pre>‘;

添加如上代码,保存,刷新。

输出如下:

咦,这不是json格式吗?

那么我们用json_encode()呢?

那么我们一起来试试看:

$c = json_encode($a);
echo “<pre>“;
var_dump($c);
echo ‘</pre>‘;

输入如上的代码,看看输出什么。区别还很大呢!这个我的观点是serialize()比json_encode()更严谨,还原度更高,因为他记录了字段长度和数据类型,接下来看还原:首先是unserialize()这个函数:

$d = unserialize($b);
echo “<pre>“;
var_dump($d);
echo ‘</pre>‘;

看输出:真的和原来一模一样;那么看json_decode()了:

$e = json_decode($c);
echo “<pre>“;
var_dump($e);
echo ‘</pre>‘;

输出是:

居然是个对象!

看了下手册发现json_decode()函数还有第二个参数,输入true可以输出数组:

那么我们把代码改成:

$e = json_decode($c,true);
echo “<pre>“;
var_dump($e);
echo ‘</pre>‘;
继续测试:

恩,这下输出就对了。

两种方法的输出完全一样,从结果分析的话,两种方法都是可用的。从存储来说显然用json_encode()更省空间。至于函数的效率这个,我就不得而知了。

但是serialize()因为记录了字段长度和数据类型,所以会更严谨一些,如果需要严格的数据类型要求,请使用serialize(),如果没有这方面的需求,可以用json_encode()。

希望大家能找到适合自己的方法,希望这些知识能帮助那些和我一样曾经迷茫的萌新。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post