这里先测试一下核心方法handleList(),即把查询的数据传进去,返回需要添加的数据
PHP代码如下 public function test(){ $list = [ ['id' => 1, 'name' => '名称1', 'desc' => '名称描述1', 'type' => 1, 'createTime' => 3802834705, 'updateTime' => 3802834705], ['id' => 2, 'name' => '名称2', 'desc' => '名称描述2', 'type' => 1, 'createTime' => 3802834705, 'updateTime' => 3802834705], ['id' => 3, 'name' => '名称3', 'desc' => '名称描述3', 'type' => 1, 'createTime' => 3802834705, 'updateTime' => 3802834705], ['id' => 4, 'name' => '名称4', 'desc' => '名称描述4', 'type' => 1, 'createTime' => 3802834705, 'updateTime' => 3802834705] ]; $toType = 2; $data = $this->handleList($list, $toType); var_export($data); } /** * 把查询出来的数据处理成需要插入的数据 * @param $list 查询出来的二维数组数据 * @param $toType 需要转换的类型 * @return array 需要插入的数据 */ public function handleList($list, $toType){ $data = []; $keys = array_keys($list[0]); //获取所有字段名 foreach ($list as $item){ $temp = []; foreach ($keys as $key){ if ($key == 'type'){ //重置type字段的值 $temp['type'] = $toType; }else{ $temp[$key] = $item[$key]; } } unset($temp['id'], $temp['createTime'], $temp['updateTime']); //删除不需要的数据 $data[] = $temp; } return $data; } $data打印 array ( 0 => array ( 'name' => '名称1', 'desc' => '名称描述1', 'type' => 2, ), 1 => array ( 'name' => '名称2', 'desc' => '名称描述2', 'type' => 2, ), 2 => array ( 'name' => '名称3', 'desc' => '名称描述3', 'type' => 2, ), 3 => array ( 'name' => '名称4', 'desc' => '名称描述4', 'type' => 2, ), )打印的 $data 结果 符合预期
注意:该代码并不能立即在您的电脑上执行,因为您并没有Db类,也没有Db类的insertAll()方法,我这里只是给您提供个思路
//入口方法: url /index/test?from=1&to=2&allow=0 (把类型1的数据复制给类型2,并且不允许重复复制) public function test(){ $param = $_REQUEST; $fromType = isset($param['from']) ? $param['from'] : 1; //原类型 $toType = isset($param['to']) ? $param['to'] : 2; //需要复制的类型 $allow = isset($param['allow']) ? $param['allow'] : 0; //是否允许重复复制:1允许;0允许,默认否 $this->copyData($fromType, $toType, $allow); } /** * 数据复制 * @param $fromType 待复制的类型 * @param $toType 需要复制的类型 * @param $allow 重复复制:0不允许;1允许。默认0 */ public function copyData($fromType, $toType, $allow){ $typeDao = new TypeDao(); if (!$allow){ //不允许重复复制 $copyInfo= $typeDao->queryAll(['type' => $toType]); if ($copyInfo){ die('数据复制过了'); } } $list = $typeDao->queryAll(['type' => $fromType]); if (empty($list)){ die('源数据不存在'); } //直接调用我们封装的方法获取需要插入的数据 $data = $this->handleList($list, $toType); $res = $typeDao->insertAll($data); //数据插入 if ($res){ die('复制成功'); } } /** * 处理批量插入数据公共方法 * @param $data 待插入的数据 * @return mixed */ public function insertAll($data){ $db = new Db(); //数据库对象 $time = time(); foreach ($data as &$item) { $item['create_time'] = isset($item['create_time']) ? $item['create_time'] : $time; $item['update_time'] = isset($item['update_time']) ? $item['update_time'] : $time; ksort($item); //对关联数组按照键名进行升序排序:为了防止数据是拼接的,每一条记录的字段顺序不同,这样可能会导致sql插入的数据(字段)混乱 } $result = $db->insertAll($data); return $result; }