PHP如何限制字符串中的行?

Rya*_*yan 1 php

我有一个像下面这样的变量,我想要一个函数只保留前20行,所以它将剥离任何额外的\n行超过20.

<?php
$mytext="Line1
Line2
Line3
....."

keeptwentyline($mytext);
?>
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 8

我想一个(也许有点愚蠢的^^)解决方案是:

  • explode 将字符串转换为行数组
  • 例如,使用仅保留X的第一行 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);
}
Run Code Online (Sandbox Code Playgroud)

注意:我将行数作为参数传递 - 这样,该函数可以在别处使用;-)
如果没有给出参数,则采用默认值:10


但可能有一些聪明的方式^^

(那可能需要qiute一些内存,将字符串复制到数组中,提取第一行,重新创建一个字符串......)


And*_*ndy 8

function keeptwentyline($string)
{
     $string = explode("\n", $string);
     array_splice($string, 20);
     return implode("\n", $string);
}
Run Code Online (Sandbox Code Playgroud)

或者(可能更快)

function keepLines($string, $lines = 20)
{
    for ($offset = 0, $x = 0; $x < $lines; $x++) {
        $offset = strpos($string, "\n", $offset) + 1;
    }

    return substr($string, 0, $offset);
}
Run Code Online (Sandbox Code Playgroud)