Спасибо, что нашли время, чтобы прочитать это, и я буду признателен за каждый ответ, не отвечающий за качество контента. 🙂
Используя PHP, я пытаюсь получить последние 15 строк текстового документа (.txt) и сохранить эти данные в переменной php. Я понимаю, что это возможно, однако, когда я получаю последние 15 строк, можно ли сохранить заказ? Например:
Текстовый документ:
A B C
Когда я хватаю текстовый документ из последних 15 символов, я не хочу, чтобы эхо заканчивалось так:
C B A
Приветствуется всякая помощь, и я с нетерпением жду ваших ответов; Спасибо. 🙂 Если бы я не объяснил ничего ясно и / или вы бы хотели, чтобы я объяснил более подробно, ответьте. 🙂
Спасибо.
Попробуйте использовать array_slice, который вернет часть массива. В этом случае вы хотите, чтобы он возвращал последние 15 строк массива, поэтому:
$filearray = file("filename"); $lastfifteenlines = array_slice($filearray,-15);
Если вы не возражаете загружать весь файл в память:
$lines = array_slice(file('test.txt'), -15); print_r($lines );
Если файл слишком большой, чтобы вписаться в память, вы можете использовать круговой метод:
// Read the last $num lines from stream $fp function read_last_lines($fp, $num) { $idx = 0; $lines = array(); while(($line = fgets($fp))) { $lines[$idx] = $line; $idx = ($idx + 1) % $num; } $p1 = array_slice($lines, $idx); $p2 = array_slice($lines, 0, $idx); $ordered_lines = array_merge($p1, $p2); return $ordered_lines; } // Open the file and read the last 15 lines $fp = fopen('test.txt', 'r'); $lines = read_last_lines($fp, 15); fclose($fp); // Output array print_r($lines);
Этот метод также будет работать, если файл имеет менее 15 строк, возвращающих массив, причем в файле столько строк.
Вы можете использовать fseek с отрицательной позицией, чтобы искать назад через файл, считая новые строки, когда идете.
Я слишком устал, чтобы написать код для копирования / прошлого кода, но есть некоторые примеры в комментариях к странице руководства для fseek, которые очень близки к тому, что вы хотите.
Если файл не больше доступной памяти, вы можете сделать это:
$fArray = file("filename"); $len = sizeof($fArray); for($i=$len -15;$i<$len ;$i++) { echo $fArray[$i]; }
Если у вас есть файл сотнями мегабайт:
$rc = fopen("file","r"); for ($i=0; $line = fgets($file) ;$i++) { if ($i%15 == 0) { $last15 = array(); } $last15[] = $line; } echo join("\n",$last15);
более длинное решение массива: array_slice(explode("\n",file_get_contents($file)),-15);
более короткое решение массива: array_slice(file($file),-15);
Этот код откроет файл, покажет общие строки, покажет заголовок файла и покажет последние строки файла, определенные в $ limit.
<?php // open the file in read mode $file = new SplFileObject('file.csv', 'r'); // get the total lines $file->seek(PHP_INT_MAX); $last_line = $file->key(); echo $last_line; echo "<br>"; // Rewind to first line to get header $file->rewind(); // Output first line if you need use the header to make something echo $file->current(); echo "<br>"; // selecting the limit $limit = 6; // selecting the last lines using the $limit $lines = new LimitIterator($file, $last_line - $limit, $last_line); //print all the last 6 lines array //print_r(iterator_to_array($lines)); //echo "<br>"; // Loop over whole file to use a single line foreach ($lines as $line) { print_r($line); echo "<br>"; }