2

我之前在这里发布过这个问题,但没有任何回应。我可能做错了什么,这里再次提供更多细节。

目录中的文件被命名为 1.txt、2.txt、3.txt 等。下面的代码片段进入该目录,打开所有读取它们的 *,txt 文件,删除欺骗并创建一个包含所有独特的内容。(本例中的名称)。

$files = glob($dirname."/*.txt"); //matches all text files
    $lines = array();
    foreach($files as $file)
    {
    $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES));
    }
    $lines = array_unique($lines);
    file_put_contents($dirname."/allofthem.txt", implode("\n", $lines));
    }

以上对我很有用!感谢 stackoverflow 的大力帮助。

但是,我希望更进一步。

而不是一个大的重复免费“allofthem.txt”文件,如何修改上述代码以从新数据中创建每个最多包含 5oo 行的文件?

他们需要进入一个新目录,例如 $dirname."/done/".$i.".txt" 我曾尝试在循环中计数,但我的努力没有奏效,最终变成了一英里长。

我还尝试将 500 推入一个数组,递增到另一个数组并以这种方式保存。没运气。我只是没有“得到”它。

同样,这个初学者需要一些专家的帮助。提前致谢。

4

3 回答 3

5

根据您的代码获得行数组后,您可以使用 将其分成 500 行的块array_chunk,然后将每个块写入其自己的文件:

// ... from your code
$lines = array_unique($lines);

$counter = 1;
foreach (array_chunk($lines, 500) as $chunk)
{
  file_put_contents($dirname . "/done/" . $counter . ".txt", implode("\n", $chunk));
  $counter++;
}
于 2010-09-11T14:34:05.453 回答
1

这个功能会带你到某个地方!

function files_identical($fn1, $fn2) {
    if(filetype($fn1) !== filetype($fn2))
        return FALSE;

    if(filesize($fn1) !== filesize($fn2))
        return FALSE;

    if(!$fp1 = fopen($fn1, 'rb'))
        return FALSE;

    if(!$fp2 = fopen($fn2, 'rb')) {
        fclose($fp1);
        return FALSE;
    }

    $same = TRUE;
    while (!feof($fp1) and !feof($fp2))
        if(fread($fp1, 4096) !== fread($fp2, 4096)) {
            $same = FALSE;
            break;
        }

    if(feof($fp1) !== feof($fp2))
        $same = FALSE;

    fclose($fp1);
    fclose($fp2);

    return $same;
}

源:http ://www.php.net/manual/en/function.md5-file.php#94494

于 2010-09-11T14:33:21.257 回答
0
$files = glob($dirname."/*.txt"); //matches all text files
$lines = array();
foreach($files as $file)
{
   $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES));
}
$lines = array_unique($lines);
$lines_per_file = 500;
$files = count($lines)/$lines_per_file;
if(count($lines) % $lines_per_file > 0) $files++;
for($i = 0; $i < $files; $i++) {
    $write = array_slice($lines, $lines_per_file * $i, $lines_per_file);
    file_put_contents($dirname."/done/".$i.".txt", implode("\n", $write));
}
于 2010-09-11T14:36:05.063 回答