1

我有一个 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 行,因此它会打印第 0 行两次,因为在搜索“keyword1”时已经打印了第 0 行。我现在的问题是,我该怎么做才能避免打印已经打印的行?

谢谢,我很感激任何帮助。

4

1 回答 1

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
       }
    }
}

?>
于 2013-09-03T05:33:52.697 回答