How to count specific lines in a text file depending on a particular variable in that line.
For example i need to count the lines of a text file only containing for instance $item1 or $item2 etc.
听起来你需要类似grep -c
在 shell 中做的事情,尝试这样的事情:
$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 。
此代码仅读取file.php
并计算包含'$item1'
or的行'$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;
逐行读取文件并使用 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);