PHP: вставлять разрыв строки после каждого слова $ num в текстовом файле

Я хочу очистить файл .txt, чтобы сделать его более читабельным, вставляя разрыв строки после каждого 4-го слова. Файл был заполнен данными из массива.

Это то, что я придумал, глядя на этот а также этот:

<?php
require "simple_html_dom.php";

$html = file_get_html("http://www.lipsum.com/");

$data = array();
$counter = 0;


foreach($html->find("div") as $tr){
$row = array();
foreach($tr->find("div") as $td){
$row[] = $td->plaintext;
}
$data[] = $row;

}


ob_start();
var_dump($data);

$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", $data);
file_put_contents('new_text_file.txt', $data);


//$handlefile = fopen("newfile.txt", "w") or die("Unable to open file!");
//file_put_contents('newfile.txt', $data);
//$output = ob_get_clean();
//$outputFile = "newfile.txt";


//fwrite($handlefile, $output);
//fclose($handlefile);



?>

Как вы можете видеть, я создал цикл for и два оператора if, чтобы «посчитать» расстояние между словами и когда counter переменная достигла 3, вставлен разрыв строки. Но это не работает, так как в первую очередь данные с веб-сайта не печатаются в текстовый файл. Это работает, однако, если я удаляю цикл for и операторы if, без сортировки, конечно.
Любой вид помощи ценится!

Изменить: обновленный код.

Редактировать 2: окончательная рабочая версия. Оригинальный вопрос оставлен для дальнейшего использования.

Это окончательная рабочая версия:

<?php
require "simple_html_dom.php";

$html = file_get_html("http://www.lipsum.com/");
$data = array();
$counter = 0;


foreach($html->find("div") as $tr){
$row = array();
foreach($tr->find("div") as $td){
$row[] = $td->plaintext;
}
$data[] = $row;

}


ob_start();
var_dump($data);
$handlefile = fopen("newfile.txt", "w") or die("Unable to open file!");
file_put_contents('newfile.txt', $data);
$output = ob_get_clean();
$outputFile = "newfile.txt";
fwrite($handlefile, $output);
fclose($handlefile);

function MakeFileReadable($source , $export) {

$content = file_get_contents($source);
$x = explode (" " , $content);

$newx = "";
$count = 1;
foreach ($x as $word) {
$newx .= $word . " ";
if ($count %12 ==0) $newx .= "\r\n";
$count ++;
}

$fp = fopen("file-export.txt" , 'w');
if (!$fp) die("There is a problem with opening file...");
fwrite($fp , $newx);
fclose($fp);

}

MakeFileReadable("newfile.txt" , "file-export.txt");

?>

1

Решение

Используйте некоторые функции массива

$string = "one two three four five six seven eight nine ten eleven tweleve thirteen fourteen";

$arr = explode (" " , $string);
$lines = array_chunk($arr,4);
foreach($lines as $line)
echo implode (" ", $line)."\r\n";

результат

one two three four
five six seven eight
nine ten eleven tweleve
thirteen fourteen
4

Другие решения

Вот решение регулярных выражений.

<?php
$test = 'one two three four five six seven eight nine ten eleven tweleve thirteen fourteen';
echo preg_replace('~((\w+\s){4})~', '$1' . "\n", $test);

Выход:

one two three four
five six seven eight
nine ten eleven tweleve

\w является символом слова (буквенно-цифровые символы плюс «_», http://en.wikipedia.org/wiki/Regular_expression), если вы только хотите A-Z использование [a-z] и использовать i модификатор, чтобы сделать его нечувствительным к регистру, ~((\w+\s){4})~i, \s это пробел и {4} требует 4 вхождения \w+\s,

По вашему коду …

$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", $data);
file_put_contents('new_text_file.txt', $data);

http://php.net/manual/en/function.file-put-contents.php

За обновленный код:

<?php
require "simple_html_dom.php";
$html = file_get_html("http://www.lipsum.com/");
$data = array();
$counter = 0;
foreach($html->find("div") as $tr){
$row = array();
foreach($tr->find("div") as $td){
$row[] = $td->plaintext;
}
$data[] = $row;
}
$data = preg_replace('~((\w+\s){4})~', '$1' . "\n", implode(' ', $data));
file_put_contents('new_text_file.txt', $data, FILE_APPEND | LOCK_EX);
3

Наконец проверенный код:

    <?php
function MakeFileReadable($source , $export) {

$content = file_get_contents($source);
$x = explode (" " , $content);

sort($x);
$newx = "";
$count = 1;
foreach ($x as $word) {
$newx .= $word . " ";
if ($count %4 ==0) $newx .= "\r\n";
$count ++;
}

$fp = fopen($export , 'w');
if (!$fp) die("There is a problem with opening file...");
fwrite($fp , $newx);
fclose($fp);

}

MakeFileReadable("file-input.txt" , "file-export.txt");
1
По вопросам рекламы [email protected]