Ответ 1
Как насчет preg_replace:
$text = "First line.\nSecond line.\nThird line.";
echo preg_replace('/^.+\n/', '', $text);
Таким образом, вам не нужно беспокоиться о том, что в вашем файле нет новой строки.
http://codepad.org/fYZuy4LS
Какой лучший способ удалить самую первую строку текстовой строки, а затем повторить остальные в PHP?
Например.
Это текстовая строка:
$t=<<<EOF
First line to be removed
All the rest
Must remain
EOF;
Это конечный результат:
All the rest
Must remain
Если я работал с файлом в Bash, я мог бы легко сделать следующее:
sed -i~ 1d target-file
Или:
tail -n +2 source-file > target-file
Любые идеи?
Как насчет preg_replace:
$text = "First line.\nSecond line.\nThird line.";
echo preg_replace('/^.+\n/', '', $text);
Таким образом, вам не нужно беспокоиться о том, что в вашем файле нет новой строки.
http://codepad.org/fYZuy4LS
Вместо explode()
и implode
вы также можете использовать strpos()
и substr()
.
<?php
function stripFirstLine($text)
{
return substr( $text, strpos($text, "\n")+1 );
}
echo stripFirstLine( "First line.\nSecond line.\nThird line.");
?>
Этот метод также быстрее, чем работа с массивами. См. Мой тест скорости: http://codepad.org/GTom43HJ
Пример в реальном времени: http://codepad.org/P8KXnqQf
explode()
он на линии разбивается на массив, shift()
от первой строки и присоединяется к остальным.
$arr = explode("\n", $t);
array_shift($arr);
echo implode("\n", $arr);
// Prints
// All the rest
// Must remain
Если ваша строка действительно большая, в ней будет много памяти. Но если ваши строки сопоставимы с вашим примером, он будет работать нормально.
Способ 2, используя strpos()
echo substr($t, strpos($t, "\n") + 1);
Я знаю, это поздний ответ, но почему бы вам просто не использовать взрыв и ограничить количество результатов
$parts = explode("\n", $test, 2);
//$parts[0] has the first line
//$parts[1] has everything else
Возвращает подстроку после первого символа новой строки:
$firstLineRemoved = $subject;
$firstNewlinePosition = strpos($subject, "\n");
if($firstNewlinePosition !== false)
{
$firstLineRemoved = substr($subject, firstNewlinePosition +1);
}
echo $firstLineRemoved;
Изменить: тот же пример, что и @ComFreek, но с проверкой ошибок в случае отсутствия символа новой строки
Более гибкое решение, в котором вы можете удалить одну или несколько строк и вернуть остальные.
function striplines($s,$n){
$arr = explode("\n", $s);
for ($i=0;$i<$n;$i++) array_shift($arr);
return implode("\n", $arr);
}
//remove first two lines
echo striplines("First line.\nSecond line.\nThird line.",2); //returns/prints only Third line
Я попробовал все это, и ни один из них не работал с большими файлами (50MB+). Вот решение, которое я создал. В вашем случае вы можете опустить эхо первой строки.
$fh = fopen($local_file, 'rb');
echo "add\tfirst\tline\n"; // add your new first line.
fgets($fh); // moves the file pointer to the next line.
echo stream_get_contents($fh); // flushes the remaining file.
fclose($fh);
Все ответы неэффективны. Нет необходимости использовать какие-либо функции для управления строкой.
$pos = 0;
while ($str[$pos] !== PHP_EOL)
$str[$pos++] = '';
echo $str;
Если вы не уверены, что строка всегда содержит более одной строки, используйте это:
if (strpos($str, PHP_EOL))
{
$pos = 0;
while ($str[$pos] !== PHP_EOL)
$str[$pos++] = '';
echo $str;
}