我是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.帮助答案 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()
写入最终数组中的值。