从存储在变量中的内容中删除顶部的前四行。

12

我有一个变量,在显示之前需要去掉前四行:

Error Report Submission
From: First Last, email@example.com, 12345
Date: 2009-04-16 04:33:31 pm Eastern

The content to be output starts here and can go on for any number of lines.

在将其作为“待处理错误报告”视图的一部分显示之前,我需要从这个数据中删除“header”。

4个回答

23

恩,我确信会有人提出更好/更短/更优雅的解决方案,不过这可能可以行得通:

$str = implode("\n", array_slice(explode("\n", $str), 4));

如果那看起来太不雅观,你可以将其抽象化:

function str_chop_lines($str, $lines = 4) {
    return implode("\n", array_slice(explode("\n", $str), $lines));
}

$str = str_chop_lines($str);

编辑:经过再三思考,我不建议使用str_chop_lines函数,除非您计划在应用程序的多个部分中使用它。我认为原始的一行代码已经足够清晰,而任何碰巧遇到str_chop_lines的人可能没有意识到默认值是4,除非去查看函数定义。


我相信你的第一个示例更易于浏览和理解,比其他一行解决方案更快地了解其含义。 'plus uno' :P - alex
是的,起初我觉得它很丑,但我认为它很清楚地说明了它的功能。 - Paolo Bergantino
2
将"limit"参数添加到explode函数中以提高效率:explode("\n", $str, 5)。 - nickf

4

$content = preg_replace("/^(.*\n){4}/", "", $content);

这行代码是用来替换字符串中的文本内容。它使用了正则表达式,将前四行文本替换为空字符串。这个函数可以在处理文本时非常有用。

2

Strpos非常有用:以下是一个例子:

// $myString = "blah blah \n \n \n etc \n \n blah blah";

$len = strpos($myString, "\n\n"); 
$string = substr($myString, $len, strlen($myString) - $len);
$string 然后包含在找到这两个换行符后的字符串。

你测试过这个吗?它对我不起作用,strpos返回第一次出现的位置,而不是之后的任何内容。 - Paolo Bergantino
抱歉 - 我编辑了我的帖子以不同的方式完成它,但忘记了实际完成它的部分! - Anthony
你测试过这个吗? :) 它也不起作用。虽然我不确定为什么。 - Paolo Bergantino
是的 - http://www.kanago.net/loltest.php,同样的 .phps 文件也有它。注释掉的字符串实际上在换行符之间有空格,而不像实际字符串那样。糟糕了。我已经尴尬到够了吗?:D - Anthony
哈哈,只是看看而已。 :) 我没有用你给的字符串进行测试,不过,使用 OP 给出的字符串在我的机器上无法工作。奇怪。 耸肩 - Paolo Bergantino

1

使用split(rex)将字符串拆分为数组,其中rex匹配两个连续的换行符,然后连接整个数组,除了第一个元素(即标题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接