【问题标题】:Elegant way to count the number of lines that contain a string in a file计算文件中包含字符串的行数的优雅方法
【发布时间】:2010-06-27 20:29:10
【问题描述】:

我有一个小问题。

正如标题所说,我想找到一种方法来计算文件中包含指定字符串的行数,在 PHP 中。

我知道我可以简单地打开文件并遍历所有行并查看是否有任何匹配项,但这似乎有点麻烦。有没有更好的办法?

为了进一步说明我想要做什么,下面是使用 awk 的效果:

awk '/KEYWORD/ {i++} END { print i }' FILE

谢谢!

【问题讨论】:

    标签: php text-files matching


    【解决方案1】:

    这对我来说似乎并不“麻烦”:

    $c = 0;
    foreach(file($filename) as $line)
      if (strpos($line, $str) !== false) ++$c;
    

    您也许可以使用正则表达式,但如果您真的想计算行数(而不是实例),肯定没有比上述方法更清洁的方法(就简洁和清晰而言)。

    编辑,根据第一条评论:

    echo substr_count(file_get_contents($filename), $str);
    

    应该可以的。

    【讨论】:

    • 我想要这些行,但是文件的格式使得如果我计算实例没有区别。
    • 那么您可以在file_get_contents() 上使用substr_count() 甚至count(preg_match_all())。所有这些方法都会将整个文件加载到内存中,这对于大文件是不可取的。
    • 更改了接受的答案,因为编辑比 dvcolgan 的答案更简单。谢谢。
    【解决方案2】:

    请注意,当使用 500MB+ 等愚蠢的大文件运行时,file() 会阻塞。如果这在您的 Web 应用程序中很常见,例如许多并发用户计算巨大的文件大小,这将影响性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多