当下做开发的用对象存储数据非常多了,如微信小程序开发中的云开发存储数据就是以对象方式保存的,还有相当多的API接口也是以JSON方式传输数据。
这次补充开发商品功能的规格模板时就使用对象方式存在数据库了,当然用两个表一对多方式关联也是非常方便,那么这次的开发会用到对象与数组互转的功能,现把整个功能记录下来。
首先数据表保存的字段内容:
$attr_list='[{"attr_id":"1","attr_name":"3R"},{"attr_id":"1","attr_name":"4R"},{"attr_id":"1","attr_name":"5R"},{"attr_id":"1","attr_name":"6R"},{"attr_id":"1","attr_name":"10寸"},{"attr_id":"1","attr_name":"12寸"},{"attr_id":"1","attr_name":"16寸"},{"attr_id":"1","attr_name":"18寸"]';
在数据表中取出这样字段,我们需要把attr_name按列表方式显示,如下图:
按钮底纹的样式,大家可以直接复制使用,CSS和HTML代码如下:
<div class="attr-name">淋膜</div>
.attr-name {
background: #f3f3f3;
color: #666666;
display: inline-block;
line-height: 32px;
margin: 5px;
border-radius: 5px;
padding: 0 15px;
}
php先通过json_decode进行转换再使用object_array函数将对象转成数组,代码如下:
$str_list='[{"attr_id":"1","attr_name":"淋膜"},{"attr_id":"1","attr_name":"冷裱"},{"attr_id":"1","attr_name":"塑封"}]';
$str_arr=object_array(json_decode($str_list));
for($i=0;$i<count($str_arr);$i++)
echo '<div class="attr-name">'.$str_arr[$i]['attr_name'].'</div>';
/*object_array是对象转成数组函数*/
function object_array($array) {
if(is_object($array)) {
$array = (array)$array;
} if(is_array($array)) {
foreach($array as $key=>$value) {
$array[$key] = object_array($value);
}
}
return $array;
}
接下来我们还需要把数据存回数据表,如用户录入或修改,这个就比较容易了,代码如下:
$str_arr[0]['attr_id']=1;
$str_arr[0]['attr_name']="淋膜";
$str_arr[1]['attr_id']=2;
$str_arr[1]['attr_name']="冷裱";
$str_object=json_encode($str_arr,JSON_UNESCAPED_UNICODE);
使用json_encode时要注意事项,如果是5.3以后的版本按以上代码即可,加了JSON_UNESCAPED_UNICODE这个参数后,保存在数据表的字符将不会采用编码后方式保存,不加参数,对于存数据表的数据就没有这么直观。
规格模板完事,接下来还要应用到商品管理中,这个又稍复杂点,到时再写一篇文章介绍。