У меня есть переменная, подобная следующей, и я хочу, чтобы функция сохраняла только первые 20 строк, поэтому она будет удалять любые дополнительные \ n строки более 20.
<?php $mytext="Line1 Line2 Line3 ....." keeptwentyline($mytext); ?>
Я полагаю, что решение (возможно, немного немое ^^) будет состоять в следующем:
explode
строку в массив строк array_slice
implode
их обратно в строку. Что-то вроде этого соответствовало бы этой идее:
var_dump(keepXlines($mytext, 5)); function keepXLines($str, $num=10) { $lines = explode("\n", $str); $firsts = array_slice($lines, 0, $num); return implode("\n", $firsts); }
Примечание. Я передал количество строк в качестве параметра – таким образом, эту функцию можно использовать в другом месте 😉
И если параметр не задан, он принимает значение по умолчанию: 10
Но может быть какой-то умный способ ^^
(что, вероятно, потребуется qiute некоторой памяти, чтобы скопировать строку в массив, извлечь первые строки, заново создать строку …)
function keeptwentyline($string) { $string = explode("\n", $string); array_splice($string, 20); return implode("\n", $string); }
Или (возможно, быстрее)
function keepLines($string, $lines = 20) { for ($offset = 0, $x = 0; $x < $lines; $x++) { $offset = strpos($string, "\n", $offset) + 1; } return substr($string, 0, $offset); }