数据插入的方法我们都知道直接写成一条语句比较快,但是如果我们想实现每多少条插入一次数据,要用到一点小小的算法
场景:每三条数据插入一次,比如此处有11条数据。会余两条腰处理
1.每次遍历将数组存入一个新的数组。
2.处理九条数据。
3.在9条数据处理的if
语句里,如果有三条数据,就做一次插入,并置空新数组。
4.处理9条数据之外的数据。如果键等于最大的键,则插入那个数组
// 这种处理方式有点偏差 但是结果是一样的
$arr = [0,1,2,3,4,5,6,7,8,9,10];
$num = 3;
$count = floor(count($arr)/$num)*$num; //取分割点的整数 此处是9
$countNum = count($arr)-1; //10
foreach ($arr as $key => $data){
$newArray[] =array('name'=>$data);
if($key<=$count ) {
if ($key % $num == 0) {
DB::table('test')->insert($newArray);
// 插入数据后要置空数组
$newArray = array();
}
}else {
if ($key==$countNum){
DB::table('test')->insert($newArray);
}
}
}
- 如果要本文所写的结果 应该以下代码
$arr = [0,1,2,3,4,5,6,7,8,9,10];
$num = 3;
$count = floor(count($arr)/$num)*$num; //取五百的整数
$countNum = count($arr);
foreach ($arr as $key => $data){
$newArray[] =array('name'=>$data);
$key = $key+1;
if($key<=$count ) {
if ($key % $num == 0) {
DB::table('test')->insert($newArray);
// 插入数据后要置空数组
$newArray = array();
}
}else {
if ($key==$countNum){
$sql = DB::table('test')->insert($newArray);
if ($sql){
return response()->json(['serverTime'=>time(),'ServerNo'=>1,'data'=>['message'=>'数据接收完毕']]);
}else{
return response()->json(['serverTime'=>time(),'ServerNo'=>0,'data'=>['message'=>'数据有丢失']]);
}
}
}
}
2.以上是使用框架的形式,直接传递数组。那么如果我们直接使用原声的写法来看下
$array = [
['name1','email1'],
['name2','email2'],
['name3','email3'],
];
$values = '';
foreach ($array as $user){
$values.= "('$user[0]','$user[1]')";
}
echo $values;
得到的是这个结果
('name1','email1')('name2','email2')('name3','email3')
根本的原则是,双引号中单引号里面的变量是可以解析的