内容纲要

刚刚在做网站开发读取数据库的时候发现需要对数据库记录的不同字段赋不同的变量来保存,以前的话我都是一个一个赋值的,但是突然想到,能不更优雅一点?在一条语句对变量同时赋值,如果是在Python中,可以这样做:

a,b,c=1,2,3

很遗憾PHP没有这种语法,因此考虑另辟蹊径,这里先给出我的数据库结构:

其中需要读取的是info、take、stay以及yun这几个字段的记录,并且只有一条数据,这个数据表保存的是站点的配置信息。

字段储存的数据是json格式的text,如果单个赋值:

$rs=Db::table('info')->field(['info','take','stay','yun'])->select()[0];
$main=json_decode($rs['info'])
$take=json_decode($rs['take'])
$stay=json_decode($rs['stay'])
$yun=json_decode($rs['yun'])

很显然,不够优雅。

这时候就可以用到list()语法来对变量进行多个赋值,注意list不是一个真正意义上的函数,而是一个语法结构。

list($var1,$var2,$var3,...)=[value1,value2,value3,...];

list()语句将对应数组的值赋给对应的变量,数组元素与list()中的变量应该一一对应,并且list只支持数字索引的数组赋值。

如果是这样:

$rs=Db::table("info")->field(['info','take','stay','yun'])->select()[0];

list($main,$take,$stay,$yun)=$arr;

很明显,都是NULL!

因为select()返回的是一个键值对索引的数组,而list只能操作数字索引的数组赋值,因此,需要新建一个数组$arr:

$rs=Db::table("info")->field(['info','take','stay','yun'])->select()[0];
        $arr=[];
        foreach($rs as $v){
            array_push($arr,$v);
        }
list($main,$take,$stay,$yun)=$arr;

当然这时候变量对应值仍然是json,而我想要的是将他们以数组的形式储存站点配置信息:

$rs=Db::table("info")->field(['info','take','stay','yun'])->select()[0];
        $arr=[];
        foreach($rs as $v){
            array_push($arr,(array)json_decode($v));
        }
list($main,$take,$stay,$yun)=$arr;

只需要在遍历记录并且生成新数组是转换就好,通过json_decode转换,然后(array)将得到的对象转为数组。

届ける言葉を今は育ててる
最后更新于 2023-05-16