Php CSV导入不同阵列的codeigniter
目前正在执行一个项目,该项目要求我将数据从CSV文件导入数据库,以下是该文件的数据示例:Php CSV导入不同阵列的codeigniter,php,codeigniter,datetime,Php,Codeigniter,Datetime,目前正在执行一个项目,该项目要求我将数据从CSV文件导入数据库,以下是该文件的数据示例: | id_attendance | name | date | time | ----------------------------------------------------- | 001 | lily |01.01.2018| 07:00 | | 002 | thomas |01.01.2018|
| id_attendance | name | date | time |
-----------------------------------------------------
| 001 | lily |01.01.2018| 07:00 |
| 002 | thomas |01.01.2018| 07:02 |
| 003 | lily |01.01.2018| 19:00 |
| 004 | thomas |01.01.2018| 19:02 |
-----------------------------------------------------
同时,我需要将这些数据导入到这种表中
| id_attendance | name | date | time_in | time_out |
--------------------------------------------------------------------
| 001 | lily |01.01.2018| 07:00 | 19.00 |
| 002 | thomas |01.01.2018| 07:02 | 19.02 |
--------------------------------------------------------------------
这需要我自动将时间字段分为时间输入和时间输出。到目前为止,我已经做了csv导入,下面是我的代码
导入SV_m.php模型
function importCSV()
{
$count=0;
$fp = fopen($_FILES['userfile']['tmp_name'],'r') or die("can't open file");
while($csv_line = fgetcsv($fp,1024))
{
$count++;
if($count == 1)
{
continue;
}
for($i = 0, $j = count($csv_line); $i < $j; $i++)
{
$insert_csv = array();
$insert_csv['id_attendance'] = $csv_line[0];
$insert_csv['name'] = $csv_line[1];
$insert_csv['date'] = $csv_line[2];
$insert_csv['time'] = $csv_line[3];
}
$i++;
$data = array(
'id_attendance' => $insert_csv['id_attendance'] ,
'name' => $insert_csv['name'],
'date' => $insert_csv['date'],
'time' => $insert_csv['time'],
);
$data['crane_features']=$this->db->insert('attendance', $data);
}
fclose($fp) or die("can't close file");
$data['success']="success";
}
函数importsv()
{
$count=0;
$fp=fopen($_FILES['userfile']['tmp_name'],'r')或die(“无法打开文件”);
而($csv_line=fgetcsv($fp,1024))
{
$count++;
如果($count==1)
{
继续;
}
对于($i=0,$j=count($csv_行);$i<$j;$i++)
{
$insert_csv=array();
$insert_csv['id_Attention']=$csv_行[0];
$insert_csv['name']=$csv_行[1];
$insert_csv['date']=$csv_行[2];
$insert_csv['time']=$csv_行[3];
}
$i++;
$data=数组(
“id_考勤”=>$insert_csv[“id_考勤”],
“名称”=>$insert_csv[“名称”],
“日期”=>$insert_csv[“日期”],
“时间”=>$insert_csv[“时间”],
);
$data['crane_features']=$this->db->insert('attention',$data);
}
fclose($fp)或die(“无法关闭文件”);
$data['success']=“success”;
}
但它只导入数据,不区分时间(无时间输入和时间输出)
我想知道是否可以导入一个数组并将其分成两部分?我创建了一些代码,试图匹配每个班次的开始和结束。其工作原理是查找匹配的开始记录,然后添加结束时间的数据。如果没有找到匹配的开始记录,则存储该数据(假设这是开始记录)。一旦找到结束记录,开始记录将从
$Attendances
中删除,因为下一个记录可能是新的班次
function importCSV()
{
$fp = fopen($_FILES['userfile']['tmp_name'],'r') or die("can't open file");
// Ignore header line
$header = fgetcsv($fp);
// Array to store the partial records
$attendancies = [];
while($csv_line = fgetcsv($fp))
{
// Key to identify first part of record (Name and date)
$key = $csv_line[1]."/".$csv_line[2];
if ( isset($attendancies[$key]) ){
$start = $attendancies[$key];
// Extract data from first part of record and add in end date from current row
$data = array(
'id_attendance' => $start[0] ,
'name' => $start[1],
'date' => $start[2],
'time_in' => $start[3],
'time_out' => $csv_line[3],
);
$data['crane_features']=$this->db->insert('attendance', $data);
// Remove partial record
unset($attendancies[$key]);
}
else {
// Store partial record
$attendancies[$key] = $csv_line;
}
}
fclose($fp) or die("can't close file");
$data['success']="success";
}
嘿,实际上我这里有个小问题。我试图导入另一个包含其他数据的文件,但它显示“键“primary”的重复条目“0”我想知道为什么每次我尝试导入一个新的csv文件时,它总是在表中插入0个值。对于您遇到问题的特定数据和您使用的代码,可能更容易再问另一个问题。实际上,我使用了您的代码,在第二次导入时,它显示“重复”,这就是为什么我通过注释部分询问您,因为这段代码只是总结了csv,它取决于密钥是什么以及数据文件中的内容。那么,在csv中,导致问题的数据是什么(具体示例会有所帮助)?