PHP从文本文件中搜索关键字,使用关键字打印整行,然后计算打印的行数

时间:2018-02-22 02:49:22

标签: php

我是PHP的新手,我尝试使用特定关键字打印某些行,并使程序计算打印的行。

这是我到目前为止所拥有的:

<?php
// LOOKS FOR "ERR:" IN THE LOG AND PRINTS THE WHOLE LINE.
$file = 'Sample.log';
$searchfor = 'ERR:';
$lines = 0;

// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');

// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor, '/');
// finalise the regular expression, matching the whole line
$pattern = "/^.*$pattern.*\$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
   echo "Lines found with the keyword " . "\"" . $searchfor . "\"" . "\n";
   echo implode("\n", $matches[0]);
   while (! feof($file))
}
else{
   echo "No matches found";
}
?>

(代码最初是由Lekensteyn制作的,我只是根据自己的喜好对其进行了修改 - https://stackoverflow.com/users/427545/lekensteyn) 它使用关键字&#34; ERR:&#34;打印文本文件中的所有行,但我希望代码使用关键字&#34; ERR打印行:&#34; (完成)并在打印的行下方输出(计算打印的行数)&#34;使用关键字** \&#34; ERR打印的总行数:**&#34;:&#34;

编辑:我试过把这个放在echo(implode)下面:     echo&#34; \ n打印总线:&#34; 。计数($比赛); 但它只输出1.帮助

1 个答案:

答案 0 :(得分:1)

这基本上是可以工作的一个班轮:

$array  =   array_filter(array_map(function($v){
    return (stripos($v,'ERR:') !== false)? $v : false; 
},array_filter(file('Sample.log',FILE_SKIP_EMPTY_LINES),function($v){
    return (!empty(trim($v)));
})));
# This will implode the lines
echo (!empty($array))? implode('<br />',$array) : '';
# This will count the array
echo ((!empty($array))? count($array) : 0).' matches found.';

首先,它使用file()使用新行将文件转换为数组,然后过滤可能存在的空行,然后使用array_map()进行迭代,然后使用stripos()进行迭代搜索ERR:的每一行,然后返回匹配的行(如果不匹配,则返回false),然后返回array_filter()没有回调以删除false的所有值(空)。最后两行破坏剩余的数组,然后使用count()写入最终数组中的值。