PHP. Как открыть файлы и прочитать их, а затем написать новые с помощью «x» строк в файле?

Я разместил этот вопрос здесь раньше, но ответов не было. Возможно, я сделал что-то не так, вот и снова с некоторыми подробностями.

Файлы в каталоге называются 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», как я могу изменить приведенный выше код для создания файлов с максимальным количеством строк в 5 точек из новых данных?

Им нужно перейти в новый каталог, например, $ dirname. "/ Done /".$ i.". Txt "Я пробовал подсчет в цикле, но мои усилия не работают и заканчиваются длиной в милю.

Я также попытался нажать 500 в массив, прирастить в другой массив и сохранить этот путь. Не повезло. Я просто не «получаю» это.

Опять же, этот новичок нуждается в некоторой экспертной помощи. Заранее спасибо.

Когда у вас есть свой массив строк в соответствии с вашим кодом, вы можете разбить его на куски 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++; } 

эта функция доставит вас куда-нибудь!

 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

 $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)); }