php& csv:列的一些操作

时间:2011-08-11 21:32:27

标签: php csv insert if-statement sql-update

我的csv看起来像这样:

column1_row1;column2_row1;column3_row1;column4_row1;... column15_row1
column1_row2;column2_row2;column3_row2;column4_row2;... column15_row2
column1_row3;column2_row3;column3_row3;column4_row3;... column15_row3

现在我必须找到每一行:

  1. 第12列仅包含“word”
  2. IF列10值>>列8值的5%
  3. 在第一行:

    1. 在数据库表“alpha”中查找第4列中包含的相应参考号
    2. 将具有某些属性的某些数据(行)(如正确的id_number和格式为0,230000的相对%为23%)插入表“beta”(基于其他列ID)
    3. 插入,更新并最终删除: 如果不再验证变体(> = 5%),不仅要执行相同的过程,还要检查和注册百分比变化,并删除带有id_number的相应行。

      修改

      我发现了这样的事情:

      $file_handle = fopen("filename.csv", "r");
      
      while (!feof($file_handle) ) {
      
      $line_of_text = fgetcsv($file_handle, 1024);
      
      print $line_of_text[0];
      
      }
      
      fclose($file_handle);
      

      但是,如果它遇到一个逗号,它会截断,我必须避免,然后必须访问列值,我不需要整行,如果csv包含许多长文本,你会建议大小而不是1024描述

1 个答案:

答案 0 :(得分:1)

您的示例csv是以分号分隔(而不是逗号),因此您需要将fgetcsv更改为:

$line_of_text = fgetcsv($file_handle, 1024, ';'); 

来自fgetcsv的PHP手册:

  

<强>长度

     

它在PHP 5中成为可选项。省略此参数(或在PHP 5.0.4和&gt;之后将其设置为0),最大行长度不受限制,稍微慢一点。

这将使你的行看起来像:

$line_of_text = fgetcsv($file_handle, 0, ';'); 

即使你可能不需要文件中的整行,你仍然会得到它,因为这是fgetcsv的工作方式。

此数组为零索引,因此您的column1将位于位置0。

获得该行后,您可以使用所需的字段,例如:

if ($line_of_text[11] == 'word')
    // do something

if (($line_of_text[7] - $line_of_text[9]) / $line_of_text[9] >= 0.05)
    // do something