计算文本文件中的特定行

时间:2013-01-14 08:59:19

标签: php count lines

如何根据该行中的特定变量计算文本文件中的特定行。

例如,我需要计算仅包含例如$ item1或$ item2等的文本文件的行。

3 个答案:

答案 0 :(得分:2)

听起来你需要像shell中的grep -c那样的东西,尝试这样的事情:

$item1 = 'match me';
$item2 = 'match me too';

// Thanks to @Baba for the suggestion:
$match_count = count(
    preg_grep(
         '/'.preg_quote($item1).'|'.preg_quote($item2).'/i',
         file('somefile_input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
    )
);

// does the same without creating a second array with the matches
$match_count = array_reduce(
    file('somefile_input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),
    function($match_count, $line) use ($item1, $item2) {  
        return 
            preg_match('/'.preg_quote($item1).'|'.preg_quote($item2).'/i', $line) ?
            $match_count + 1 : $match_count;
    }
);

上面的代码示例使用file()函数将文件读入数组(按行分割),array_reduce()以迭代该数组,并在迭代内部preg_match()查看是否存在行匹配(最后的/i使其不区分大小写。)

你也可以使用foreach。

答案 1 :(得分:1)

此代码显示file.php并仅计算包含'$item1''$item2'的行。检查本身可以进行微调,因为您必须为要检查的每个单词添加新的stristr()

<?php

$file = 'file.php';

$fp = fopen($file, 'r');
$size = filesize($file);
$content = fread($fp, $size);

$lines = preg_split('/\n/', $content);

$count = 0;
foreach($lines as $line) {
    if(stristr($line, '$item1') || stristr($line, '$item2')) {
        $count++;
    }
}
echo $count;

答案 2 :(得分:1)

逐行读取文件并使用strpos确定某行是否包含特定字符串/项目。

$handle = fopen ("filename", "r");
$counter = 0;
while (!feof($handle))
{
  $line = fgets($handle);
  // or $item2, $item3, etc.
  $pos = strpos($line, $item);
  if ($pos !== false)
  {
    $counter++
  }
}
fclose ($handle);