tp6接口开发 批量修改数组的键

问题描述

在thinkphp开发过程中,会遇到接口获取的参数名与数据库字段不一致的情况,这时如果想使用tp提供的模型存储方法,就需要一个一个地修改键名,这会使得代码变的臃肿。解决这种问题最简单的方法便是将参数名与数据表中字段名统一,不过这样会暴露数据表真实字段名,导致一些不必要的风险。因此本文针对这个问题提出了以下解决方案。

相关代码

批量修改数组键方法 modifyKeys()
/**
 * 数组工具类,实现一些对数组的操作
 * Class ArrayUtil
 * @package app\util
 */
class ArrayUtil
{
    /**
     * 根据数组修改数组的键
     * @param $arrays array 需要修改的数组
     * @param $keys array 目标键值对数组
     * @param $level integer 数组维度 当接口获取一条数据时数组维度为1,多条数据时数组维度为2.
     * @return array
     * @throws Exception 限制数组维度小于等于2维
     */
    static public function modifyKeys($arrays, $keys, $level)
    {
        if ($level > 2){
            throw new Exception('错误的维度');
        }
        if ($level == 1){
            $arrays = array($arrays);
        }

        $newArrays = array();
        foreach ($arrays as $i => $arr){
            $tempKeys = $keys;
            foreach ($arr as $oldKey => $value) {
                foreach ($tempKeys as $key => $newKey){
                    if ($key == $oldKey){
                        $arr[$newKey] = $value;
                        unset($arr[$oldKey]);
                        unset($tempKeys[$key]);
                        break;
                    }
                }
            }
            $newArrays[$i] = $arr;
        }
        return $level == 1 ? $newArrays[0] : $newArrays;
    }
}
方法在tp模型中的使用
class User extends Model
{
    /**
     * @var string[接口字段 => 数据库字段] 接口上传的字段与数据库字段之间的映射
     */
    private $fieldMap = [
        'nickname' => 'name'
    ];

    /**
     * 添加用户
     * @param $data array 用户数据
     * @return bool|Json
     * @throws Exception
     * @throws \Exception
     */
    public function add($data)
    {
        $data = ArrayUtil::modifyKeys($data, $this->fieldMap, 2);
        $this->saveAll($data);

        return true;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值