搜索&的PHP脚本从文件中打印行。如何避免打印同一行?

时间:2013-09-03 05:04:55

标签: php file search

我有一个PHP文件,每行都有不同的html信息,例如:

0 <div><a href="post1.html">This post has keyword1 and keyword2</a></div>
1 </div><a href="post2.html">This post has keyword3 and keyword4</a></div>
2 </div><a href="post3.html">This post has keyword2 and keyword5</a></div>

现在我有一个PHP脚本,当它找到我通过数组给出的关键字时,会从该文件中打印一行。这是脚本:

<?php 
  $filename = 'post_file.php';
  $KEYWORDS_to_find = array("keyword1","keyword2");
  $i=0;
  foreach($KEYWORDS_to_find as $keyword){
     foreach(file($filename) as $fli=>$fl){
       if($i>=5) break;
       if(stripos($fl, $keyword)!==false){ 
         echo $fl;
         $i++;
       }
     }
  }
?>

它开始在post_file.php的每一行中搜索“keyword1”直到结束。如果找到“keyword1”,在本例中为第0行,则打印第0行的整个内容。当它以“keyword1”结束时,使用数组的第二个元素或关键字启动相同的进程,在本例中为“keyword2” ”。从文件中打印5行后脚本停止。

我想弄清楚的问题是它会打印已经打印过的行。例如,“keyword2”存在于第0行和第2行中,因此当搜索“keyword1”时,它会打印第0行,因为已经打印了第0行。我现在的问题是,我该怎么做才能避免打印已印刷的线?

谢谢,我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

应该有效:

<?php

$filename = 'post_file.php';
$KEYWORDS_to_find = array("keyword1","keyword2");
$i=0;
$printed_lines = array(); //added this line
foreach($KEYWORDS_to_find as $keyword){
    foreach(file($filename) as $fli=>$fl){
       if($i>=5) break;
       if(stripos($fl, $keyword)!==false){ 
        if(!in_array($fl,$printed_lines)) { //added this line
            $printed_lines[] = $fl; //added this line
            echo $fl;
            $i++;
        } //added this line
       }
    }
}

?>