如何迭代PHP中的每一行字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我有一个表单,允许用户上传文本文件或将文件的内容复制/粘贴到textarea中。我可以很容易地区分两者,并将它们输入的任何一个放入字符串变量中,但我从哪里去?

我需要迭代字符串的每一行(最好不要担心不同机器上的换行符),确保它只有一个标记(不包括空格,制表符,逗号等),清理数据,然后生成SQL查询基于所有线路。

我主要是在寻找有用的PHP函数,而不是如何去做的算法。有什么建议么?

提问于
用户回答回答于

包含文本的变量,并遍历返回的数组:

foreach(preg_split("/((\r?\n)|(\r\n?))/", $subject) as $line){
    // do stuff with $line
} 
用户回答回答于

我想提出一个显著更快(和内存使用效率)的替代:strtok不是preg_split

$separator = "\r\n";
$line = strtok($subject, $separator);

while ($line !== false) {
    # do something with $line
    $line = strtok( $separator );
}

测试性能,我用一万七千行测试文件迭代了100次:preg_split耗时27.7秒,而strtok耗时1.4秒。

请注意,尽管$separator被定义为"\r\n"strtok将在任何字符上分开 - 并且从PHP4.1.0开始,跳过空行/令牌。

扫码关注云+社区