在 PHP 中循环访问字符串中的每一行

2022-08-30 06:44:16

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

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

我是一个相当好的程序员,所以我知道如何做到这一点的一般想法,但是自从我使用PHP以来已经很久了,我觉得我正在寻找错误的东西,从而提出了无用的信息。我遇到的关键问题是我想逐行阅读字符串的内容。如果它是一个文件,那将很容易。

我主要寻找有用的PHP函数,而不是如何做到这一点的算法。有什么建议吗?


答案 1

preg_split包含文本的变量,并循环访问返回的数组:

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

答案 2

我想提出一个明显更快(和内存效率)的替代方案:而不是。strtokpreg_split

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

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

测试性能时,我在一个包含 17000 行的测试文件上迭代了 100 次:耗时 27.7 秒,而耗时 1.4 秒。preg_splitstrtok

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

请参阅 strtok 手动输入:http://php.net/strtok


推荐