如何阻止foreach循环打印重复数据?

时间:2015-06-16 09:55:38

标签: php csv foreach

我正在尝试使用以下循环从csv数据生成唯一的CSV文件。

 $k =1;
 foreach ($csv_tbl as $_csv) {
        $filename = "Agent_" . $k . ".csv";
        $file_path = "agents/$filename";
        file_put_contents($file_path, $_csv);
        if (file_exists($_csv)) {
            header('Content-Description: File Transfer');
            header('Content-type: text/csv');
            header('Content-Disposition: attachment; filename=' . $filename);
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($_csv));
            readfile($_csv);
            die();
        }
        $k++;
    }

生成的第一个文件是完美的,只有它应该拥有的数据,即第一个csv表。第二个文件包含所有21个文件的第一个和第二个表,这意味着第21个文件将包含所有表。

前两个文件的可视示例。

Agent_1.csv Agent_2.csv

如何防止csv文件中的重复表?

1 个答案:

答案 0 :(得分:1)

由于您的foreach正在打印​​重复项,这意味着您的array $csv_tbl包含重复值,您可以使用array_unqiue从数组中删除重复值但是通过查看屏幕截图我可以看到callid是每条记录都有所不同。你的csv包含重复项吗?::

 $k =1;
 $csv_tbl = array_unique($csv_tbl);
 foreach ($csv_tbl as $_csv) {
        $filename = "Agent_" . $k . ".csv";
        $file_path = "agents/$filename";
        file_put_contents($file_path, $_csv);
        if (file_exists($_csv)) {
            header('Content-Description: File Transfer');
            header('Content-type: text/csv');
            header('Content-Disposition: attachment; filename=' . $filename);
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($_csv));
            readfile($_csv);
            die();
        }
        $k++;
    }