在 PHP 5.3 中有一个 很好的函数 似乎可以做我想做的事:
strstr(input,"\n",true)
不幸的是,服务器运行 PHP 5.2.17,可选的第三个参数 strstr
不可用。有没有办法在一行中在以前的版本中实现这一点?
原文由 kinokijuf 发布,翻译遵循 CC BY-SA 4.0 许可协议
已经晚了,但你可以使用爆炸。
<?php
$lines=explode("\n", $string);
echo $lines['0'];
?>
原文由 Connor Gurney 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
对于相对较短的文本,行可以由一个 (”\n”) 或两个 (”\r\n”) 字符分隔,单行代码可能类似于
对于第一个换行符之前的任何序列,即使它是一个空字符串,
或者
对于第一个非空字符串。
但是,对于大文本,它可能会导致内存问题,因此在这种情况下
strtok
或其他答案中提到的基于substr
的解决方案应该是首选。大约十年前第一次写这个答案时,它有一些细微的差别
PHP_EOL
不是解决方案,因为我们可以处理外部数据,不受本地系统设置的影响explode()
或preg_split()
,因此提出了strtok()
的技巧。然而,不久之后,由于 Nikita Popov 提出的 Uniform Variable Syntax ,可以在简洁的一行中使用其中一个函数但随着这个问题越来越受欢迎,最好在答案中涵盖所有可能的边缘情况。但由于历史原因,这里是原始解决方案:
这将从 unix 格式的文本中返回第一个非空行。
但是,考虑到行分隔符可能不同并且
strtok()
的行为并不是那么直,因为“忽略字符串开头或结尾的分隔符”, 正如手册页中所说 C 中的原始 strtok() 函数,现在我建议谨慎使用此函数。