Подтвердить что ты не робот

PHP: удалить первую строку текста и вернуть остальные

Какой лучший способ удалить самую первую строку текстовой строки, а затем повторить остальные в 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

Любые идеи?

4b9b3361

Ответ 1

Как насчет preg_replace:

$text = "First line.\nSecond line.\nThird line.";
echo preg_replace('/^.+\n/', '', $text);

Таким образом, вам не нужно беспокоиться о том, что в вашем файле нет новой строки.
http://codepad.org/fYZuy4LS

Ответ 2

Вместо 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

Ответ 3

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);

Ответ 4

Я знаю, это поздний ответ, но почему бы вам просто не использовать взрыв и ограничить количество результатов

$parts = explode("\n", $test, 2);
//$parts[0] has the first line
//$parts[1] has everything else

Ответ 5

Возвращает подстроку после первого символа новой строки:

$firstLineRemoved = $subject;
$firstNewlinePosition = strpos($subject, "\n");
if($firstNewlinePosition !== false)
{
  $firstLineRemoved = substr($subject, firstNewlinePosition +1);
}
echo $firstLineRemoved;

Изменить: тот же пример, что и @ComFreek, но с проверкой ошибок в случае отсутствия символа новой строки

Ответ 6

Более гибкое решение, в котором вы можете удалить одну или несколько строк и вернуть остальные.

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

Ответ 7

Я попробовал все это, и ни один из них не работал с большими файлами (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);

Ответ 8

Все ответы неэффективны. Нет необходимости использовать какие-либо функции для управления строкой.

$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;
}