使用php从csv文件中获取数据

时间:2012-08-27 09:48:13

标签: php cakephp cakephp-2.0 cakephp-2.1

我有csv文件mail.csv我的文字如下:

d,2012-08-24 00:00:57+0200,2012-08-24 00:00:45+0200,noreply@news.camera-factice.com,...
d,2012-08-24 00:00:57+0200,2012-08-24 00:00:45+0200,noreply@118-bonsplans.com,toulouse@texa.fr,...
b,2012-08-24 00:00:57+0200,2012-08-22 23:59:31+0200,noreply@lemeilleur-duweb.com,...
b,2012-08-24 00:00:57+0200,2012-08-22 23:59:31+0200,noreply@lemeilleur-duweb.com,...

我想只获得mail.exaple:noreply@lemeilleur-duweb.com。如果邮件中有2封或更多邮件是相同的,我只想收一封邮件。我的代码如下:

<?php       
    $handle = fopen('acct-2012-08-24-0001.csv', 'r');
    $mail = 'noreply@118-bonsplans.com';
    $respon = 'fail';
    $Totalcounter = 0;
    $mailFail = 0;
    $percentage = 0;
    $data[]="";
    if ($handle) {
        while (($buffer = fgets($handle, 4096)) !== false) {
         if (stristr($buffer, '118-bonsplans.com')) $Totalcounter += 1;
         if(($data = fgetcsv($handle, 1000, ",")) !== FALSE);
         if (stristr($buffer, $mail) && stristr($buffer,$respon)) $mailFail += 1;

    }   fclose($handle);

    //echo $data[3];
    }
     $percentage = ($mailFail/$Totalcounter)*100;
     echo '<table border="1px">';
     echo "<tr><td>Dormain</td><td>Total</td><td>Mail Fail</td><td>Percentage</td></tr>";
     echo "<tr><td>".$data[3]."</td><td>".$Totalcounter."</td><td>".$mailFail."</td><td>".$percentage."</td></tr>";
     echo '</table>';


?>

注意   对于这段代码,我写了if(($data = fgetcsv($handle, 1000, ",")) !== FALSE);来从csv文件中获取邮件。但它不起作用。

请任何人帮助我, 感谢

1 个答案:

答案 0 :(得分:0)

从我可以收集到的内容 - 您试图阻止脚本输出重复的电子邮件地址。解决这个问题非常简单。您需要做的是设置一个数组,用于存储您要输出的电子邮件地址。在向此阵列添加电子邮件之前,您需要检查以前是否尚未添加电子邮件。如果已添加,添加。如果尚未添加,执行添加。可以在in_array()功能的帮助下完成此检查。

通过这样做,您将留下一个不会包含任何重复电子邮件地址的数组。