在PHP中,经常会将数组作为参数进行传递;现在的一个需求是,首先Web程序从Request中获取到了一些参数,比如usernumber,username,password等等,将这些拼装成了一个数组,并将其作为参数,传给model层并写入数据库。比如:
在控制器中拼装了如下参数:
$params = [
'number' => 1001,
'username' => 'kirineko',
'password' => '123456',
'school' => 'cmu',
];
Model\User::insert($params);
在模型层中写了一个insert方法:
public static insert($params)
{
$ins = new self();
foreach($params as $key => $value) {
$ins->{$key} = $value;
}
$ins->save();
}
但是目前的问题在于,如果我在传递参数时,传递的数组索引,在数据库中并没有,比如上述传递的school,在数据库中就并没有这个字段;并比如数据库中需要传入age的值,上述数据中却并没有传递。上述这些情况都会造成数据库写入失败。
现在我的解决方案是,在insert方法中,对传入的数据参数进行过滤,方法如下:
public static insert($params) {
$ins = new self();
$filters = ['number','username','password','age'];
$real_params = [];
foreach ($filters as $filter) {
if(isset($params[$filter])) {
$invite_params[$filter] = $params[$filter];
}
}
foreach($invite_params as $key => $value) {
$ins->{$key} = $value;
}
$ins->save();
}
通过过滤,把数组中合法的输入赋给了另外一个数组。但是这种方法是在是太麻烦了。请问有没有更好的方法实现这个功能呢?