dp7311 2019-07-04 07:22
浏览 129
已采纳

如何在插入表之前检查csv文件是否有重复值

I' have problem csv on upload, First I want to check the duplicate data or column or row before i enter it into the database. I have 2 columns/row, I want to check all the data on the two columns or row before it inserted it into the table.

Note: If duplicates found in all two columns or row it will throw and error or echo the duplicate value, And it will not continue to the insert function.

$stored = [];
$handle2 = fopen($_FILES["charge_file"]["tmp_name"],"r");
while(($data1 = fgetcsv($handle2,1000,",")) !==false){

    $charge_emp = trim($data1[0]);
    $charge_amount = trim($data1[2]);



    // this is the function on checking the duplicates
    if (in_array($data1[0], $stored)) { continue;}
    $stored[] = $data1[0];

    showDups($stored);


    // this is my insert function
    charges_group_entry($charge_emp,$charge_amount);

}

fclose($handle);

function showDups($array)
{
    $array_temp = array();

    foreach($array as $val)
    {
        if (!in_array($val, $array_temp))
        {
        $array_temp[] = $val;
        }
        else
        {
        echo 'duplicate = ' . $val . '<br />';
        }
    }
}
  • 写回答

1条回答 默认 最新

  • duanli0119 2019-07-04 10:12
    关注

    Not sure what you mean by "duplicates data found on 2 columns" so here's two solutions in one :

    $stored_emp = [];
    $stored_amount = [];
    $stored_pair = [];
    $global_duplicate=false;
    $handle2 = fopen($_FILES["charge_file"]["tmp_name"],"r");
    while(($data1 = fgetcsv($handle2,1000,",")) !==false){
    
        $charge_emp = trim($data1[0]);
        $charge_amount = trim($data1[2]);
        $pair = $charge_emp.' '.$charge_amount;
    
        // this is the code for checking the duplicates separately
        $duplicate=false;
        if (in_array($charge_emp, $stored_emp)) {
          echo 'duplicate emp = ' . $charge_emp . '<br />';
          $duplicate=true;
        }
        if (in_array($charge_amount, $stored_amount)) {
          echo 'duplicate amount = ' . $charge_amount . '<br />';
          $duplicate=true;
        }
        if($duplicate){
          $global_duplicate=true;
          continue;
        }
        $stored_emp[] = $charge_emp;
        $stored_amount[] = $charge_amount;
    
        //use this instead if you want to check pair duplicates
        if (in_array($pair, $stored_pair)) {
          echo 'duplicate pair = ' . $pair . '<br />';
          $global_duplicate=true;
          continue;
        }
        $stored_pair[] = $pair;
    }
    //only insert values if no duplicates found
    if(!$global_duplicate){
      foreach($stored_emp as $nrow=>$emp){
        charges_group_entry($emp,$stored_amount[$nrow]);
      }
    }
    
    fclose($handle);
    

    In any cases showDups wasn't needed (nor used) since you already filtered $stored.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面