在PHP中获取字符串的第一行

新手上路,请多包涵

在 PHP 5.3 中有一个 很好的函数 似乎可以做我想做的事:

 strstr(input,"\n",true)

不幸的是,服务器运行 PHP 5.2.17,可选的第三个参数 strstr 不可用。有没有办法在一行中在以前的版本中实现这一点?

原文由 kinokijuf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 483
2 个回答

对于相对较短的文本,行可以由一个 (”\n”) 或两个 (”\r\n”) 字符分隔,单行代码可能类似于

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

对于第一个换行符之前的任何序列,即使它是一个空字符串,

或者

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

对于第一个非空字符串。

但是,对于大文本,它可能会导致内存问题,因此在这种情况下 strtok 或其他答案中提到的基于 substr 的解决方案应该是首选。

大约十年前第一次写这个答案时,它有一些细微的差别

  • 它过于本地化,遵循开场白假设行分隔符始终是单个“\n”字符,但情况并非总是如此。使用 PHP_EOL 不是解决方案,因为我们可以处理外部数据,不受本地系统设置的影响
  • 假定我们需要第一个非空字符串
  • 无法在一行中使用 explode()preg_split() ,因此提出了 strtok() 的技巧。然而,不久之后,由于 Nikita Popov 提出的 Uniform Variable Syntax ,可以在简洁的一行中使用其中一个函数

但随着这个问题越来越受欢迎,最好在答案中涵盖所有可能的边缘情况。但由于历史原因,这里是原始解决方案:

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

这将从 unix 格式的文本中返回第一个非空行。

但是,考虑到行分隔符可能不同并且 strtok() 的行为并不是那么直,因为“忽略字符串开头或结尾的分隔符”, 正如手册页中所说 C 中的原始 strtok() 函数,现在我建议谨慎使用此函数。

原文由 Your Common Sense 发布,翻译遵循 CC BY-SA 4.0 许可协议

已经晚了,但你可以使用爆炸。

 <?php
$lines=explode("\n", $string);
echo $lines['0'];
?>

原文由 Connor Gurney 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏