PHP保存数组到数据库

admin1年前php345

数组是 PHP 开发中使用最多的数据类型之一,对于结构化的数据尤为重要。

很多时候我们需要把数组保存到数据库中,实现对结构化数据的直接存储和读取。

其中一个案例就是,对于 Form 提交的多选 checkbox 数据,PHP后端就收到的数据就是一个数组,而且有可能还是多维数组。例如,如下一个员工数组:

$staff = array
( array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理", "mobile" => array("01234567890", "9876543210")), 
 array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"), 
 array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理"), 
);

对于这样的数据,MySQL数据库是无法直接写入的,那么有什么办法呢?

有,但是需要稍微转换一下,不过也很简单。就是使用PHP自带的serialize()或者json_encode()函数序列化数据成字符串:

//写入数据库之前
$staff_serialize = serialize($staff);            // 序列化成字符串
$staff_json = json_encode($staff);               // JSON编码数组成字符串

// 读取数据库后
$staff_restore = unserialize($staff_serialize);  // 反序列化成数组
$staff_dejson = json_decode($staff_json, true);  // JSON解码成数组

之后从数据库里面读出来的数据还是字符串格式的,用unserialize()json_decode()函数转换成数组就可以了。


不过用json_decode()函数转换成数组:需要做以下处理

1、使用 json_decode($d, true)。就是使json_decode 的第二个变量设置为 true。

2、json_decode($res) 返回的是一个对象, 不可以使用 $res['key'] 进行访问, 换成 $res->key 就可以了。

防止出现如下错误

Cannot use object of type stdClass as array


相关文章

php.ini 7.3设置

date.timezone = PRCdisplay_errors = On网络保存图片,以及微信获取手机号码: windows下的PHP,只需要到php.ini中把前面的&nb...

php post undefined index,PHP 中提示undefined index的解决方案

声明为空isset($_POST['user_email']),或者,empty($_POST['user_email'])在php.ini中设置error_repor...

把一个索引数组内的某个元素删除后直接转成json输出,数据格式不正确

可以看到数组格式在unset后发生变化 解决方法很简单 仅一行代码就可以解决在foreach后 增加$arr = array_values($arr);转至:https://blog.csdn.net...

paypal支付接口开发--token获取,订单详情获取,交易信息获取

paypal支付接口开发--token获取,订单详情获取,交易信息获取

代码下载完整代码下载<?php  //获取token function get_token($clientId,$secret) {   &nbs...

php如何获取cookie的过期时间

将编码的json放入cookie中是我最喜欢的方法,以便从cookie中正确获取格式化的数据。 试一下:$expiry = time() + 12345;&nb...

apache在windows环境设置站点目录的时候需要设置给网站目录设置USER的读写修改删除权限,否则站点会开设不成功

apache在windows环境设置站点目录的时候需要设置给网站目录设置USER的读写修改删除权限,否则站点会开设不成功

apache在windows环境设置站点目录的时候需要设置给网站目录设置USER的读写修改删除权限,否则站点会开设不成功,设置方法:如下图所示:...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。