在 PHP 5.3 中有一个不错的功能 http://www.php.net/manual/en/function.strstr.php这似乎做我想做的:
strstr(input,"\n",true)
不幸的是,服务器运行 PHP 5.2.17 和可选的第三个参数strstr
不可用。有没有办法在以前的版本中一行实现这一点?
对于相对较短的文本,行可以由一个(“\n”)或两个(“\r\n”)字符分隔,单行可能类似于
$line = preg_split('#\r?\n#', $input, 2)[0];
对于第一个换行之前的任何序列,即使它是空字符串,
or
$line = preg_split('#\r?\n#', ltrim($input), 2)[0];
对于第一个非空字符串。
然而,对于大文本,它可能会导致内存问题,所以在这种情况下strtok
下面提到的或substr
其他答案中基于的解决方案应该是首选。
当这个答案第一次写出来时,大约十年前,它有一些微妙的细微差别
- 它太本地化了,在开篇文章之后假设行分隔符始终是单个“\n”字符,但情况并非总是如此。使用
PHP_EOL
不是解决方案,因为我们可以处理外部数据,不受本地系统设置的影响
- 假设我们需要第一个非空字符串
- 也没有办法使用
explode()
or preg_split()
在一行中,因此有一个技巧strtok()
被提议。然而不久之后,多亏了统一变量语法 https://wiki.php.net/rfc/uniform_variable_syntax,提出者尼基塔·波波夫 https://stackoverflow.com/users/385378/nikic,可以在简洁的一行中使用这些函数之一
但随着这个问题越来越受欢迎,最好在答案中涵盖所有可能的边缘情况。但由于历史原因,这里是最初的解决方案:
$str = strtok($input, "\n");
它将返回 unix 格式文本中的第一个非空行。
但是,考虑到行分隔符可能不同并且行为strtok()
不是那么直接,因为“字符串开头或结尾的分隔符被忽略”,正如手册页所说 https://stackoverflow.com/a/18275378/285587对于 C 中原始的 strtok() 函数,现在我建议谨慎使用该函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)