我之前在这里发过这个问题,但没有回复。我可能做错了所以,这里再说一些细节。
目录中的文件名为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“我已经尝试计算循环,但我的努力没有奏效,最终只有一英里长。< / p>
我还尝试将500推入数组,增加到另一个数组并保存。没运气。我只是没有“得到”它。
同样,这位初学者需要一些专家帮助。提前谢谢。
答案 0 :(得分:5)
根据代码获得行数组后,可以使用array_chunk
将其分成500行,然后将每个块写入自己的文件:
// ... 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++;
}
答案 1 :(得分: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;
}
Src:http://www.php.net/manual/en/function.md5-file.php#94494
答案 2 :(得分: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));
}