php对于数组与对象之间的互转,适用于JSON数据传输
发表人:金马 | 2022-05-06

当下做开发的用对象存储数据非常多了,如微信小程序开发中的云开发存储数据就是以对象方式保存的,还有相当多的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按列表方式显示,如下图:

image.png

按钮底纹的样式,大家可以直接复制使用,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这个参数后,保存在数据表的字符将不会采用编码后方式保存,不加参数,对于存数据表的数据就没有这么直观。

image.png

规格模板完事,接下来还要应用到商品管理中,这个又稍复杂点,到时再写一篇文章介绍。

我来说两句(0)
:zui: :wink: :twisted: :roll: :oops: :mrgreen: :love: :lol: :jidong: :idea: :han:
发表评论(Ctrl+Enter)
—— 金马科技公众号 ——
十二年 行业积累

砥砺前行路上,有您关注,相聚相研共话成长!

如有意向,请与我们联系

办公电话:0774-3838278 / QQ:154727262 / 微信:wztmma