phpstringnewlinestrstr

Obtain first line of a string in PHP


In PHP 5.3 there is a nice function that seems to do what I want:

strstr(input,"\n",true)

Unfortunately, the server runs PHP 5.2.17 and the optional third parameter of strstr is not available. Is there a way to achieve this in previous versions in one line?


Solution

  • For the relatively short texts, where lines could be delimited by either one ("\n") or two ("\r\n") characters, the one-liner could be like

    $line = preg_split('#\r?\n#', $input, 2)[0];
    

    for any sequence before the first line feed, even if it an empty string,

    or

    $line = preg_split('#\r?\n#', ltrim($input), 2)[0];
    

    for the first non-empty string.

    However, for the large texts it could cause memory issues, so in this case strtok mentioned below or a substr-based solution featured in the other answers should be preferred.

    When this answer was first written, almost a decade ago, it featured a few subtle nuances

    but as this question gained some popularity, it's better to cover all the possible edge cases in the answer. But for the historical reasons here is the original solution:

    $str = strtok($input, "\n");
    

    that will return the first non-empty line from the text in the unix format.

    However, given that the line delimiters could be different and the behavior of strtok() is not that straight, as "Delimiter characters at the start or end of the string are ignored", as it says the man page for the original strtok() function in C, now I would advise to use this function with caution.