Php CSV导入不同阵列的codeigniter

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|

目前正在执行一个项目,该项目要求我将数据从CSV文件导入数据库,以下是该文件的数据示例:

|   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中,导致问题的数据是什么(具体示例会有所帮助)?