如何在PHP中拆分CSV文件?

aan*_*est 5 php csv

我有一个很大的CSV文件.我想根据其中一个字段中的值将此文件分成单独的文件.

这就是我所做的.使用fgetcsv我将CSV转换为数组,并使用in_array,我检查内容并显示它是否包含数组中的字符串.

我将迭代地从另一个文本文件中获取比较字符串,以检查它是否包含在csv中.在这种情况下,我将其指定为"测试".

以下是代码:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

             if(in_array("Testing", $data))
             {
               var_dump($data);
             }
        }

        fclose($handle);
    }
Run Code Online (Sandbox Code Playgroud)

这是有效的,但现在我被卡住了.如何写入$data另一个CSV文件?或者有更好的方法吗?

Gor*_*don 6

它实际上非常简单,如果字符串必须在线上,你甚至不需要fgetcsv.只是

$srcFile = new SplFileObject('test.csv');
$destFile = new SplFileObject('new.csv', 'w+');
foreach ($srcFile as $line) {
    if (strpos($line, 'testing') !== FALSE) {
        $destFile->fwrite($line);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将创建两个文件对象.第一个包含源文件的内容.第二个为包含搜索字符串的行创建一个全新文件.然后我们迭代每一行并检查搜索字符串是否存在.如果是这样,我们将其写入目标文件.

不会以这种方式触摸源文件.如果你想拥有一个带有搜索字符串的文件而没有一个没有的文件,只需创建第三个SplFileObject,然后添加一个else块,然后将该行写入该文件.最后,删除源csv文件.