Собрал такой вот скрипт при помощи гугла и мануалов, но, дальше, метод тыка не увенчался успехом

216
27 декабря 2017, 21:53

В общем, требуется сгенерировать текст по принципу: тянем рандомно по одной строке из нескольких файлов, выбираем определенное количество слов из каждой и потом все складываем абзацами в одно целое. У меня уже получилось кое-что, но, до конца допилить уже не могу. Два дня бьюсь об учебники, понимая, что ничего не смыслю в программировании и надо учить, но скрипт мне нужен уже вчера чтобы работал. Помогите люди добрые! Сейчас скрипт берет только первую строку из файлов, игнорируя array_rand и выводит все одной простыней, а надо абзацами.

<?php
$arr_1 = explode(' ', file_get_contents('data/content/top_post.txt'));
$arr_2 = explode(' ', file_get_contents('data/content/get_content.txt'));
$arr_3 = explode(' ', file_get_contents('data/content/free_text.txt'));
$arr_4 = explode(' ', file_get_contents('data/content/must_have_keys.txt'));
$arr_5 = explode(' ', file_get_contents('data/content/get_content.txt'));
mt_rand($arr_1);
$i = -1;
while (++$i <= 11) {
 $arr_6[] = $arr_1[$i];
}
array_rand($arr_2);
$b = -1;
while (++$b <= 11) {
 $arr_7[] = $arr_2[$b];
}
array_rand($arr_3);
$c = -1;
while (++$c <= 11) {
 $arr_8[] = $arr_3[$c];
}
array_rand($arr_4);
$d = -1;
while (++$d <= 11) {
 $arr_9[] = $arr_4[$d];
 }
array_rand($arr_5);
$e = -1;
while (++$e <= 11) {
 $arr_10[] = $arr_5[$e];
}
$mix = array_merge($arr_8, $arr_9);
shuffle($mix);
$mixed = array_merge($arr_6, $arr_7, $mix, $arr_10);
$result = implode(' ', $mixed);
echo $result;
?>
Answer 1

Посмотрите на результат этого примера:

$offset = 1; // С какого слова начинается выборка (с 1-го слова)
$length = 3; // Количество выбираемых из строки слов
$dir = 'data/content/*.txt'; // Директория с файлами (выбор файлов по маске)
$array_worlds = array_map(function($file_name)use($offset, $length) {
    $strings = file($file_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    shuffle($strings);
    $temp = explode(' ', $strings[0]);
    shuffle($temp);
    return join(' ', array_slice($temp, --$offset, $length));
}, glob($dir));
foreach ($array_worlds as $string) {
    echo "<p>$string</p>";
}