【问题标题】:PHP Script that searches & prints lines from file. How to avoid printing the same line?从文件中搜索和打印行的 PHP 脚本。如何避免打印同一行?
【发布时间】:2013-09-06 05:23:36
【问题描述】:

我有一个 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 行。我现在的问题是,我该怎么做才能避免打印已经打印的行?

谢谢,感谢您的帮助。

【问题讨论】:

  • 您可以先迭代行,然后在每一行上检查是否至少存在一个关键字,而不是先迭代关键字。
  • 我可能会像@Passerby 所说的那样做。但是,如果出于某种原因,您希望保留它已经存在的顺序,您可以引入一个数组来跟踪已打印的行号。您必须移动 $i=0 以便它位于 foreach 循环中的关键字。

标签: php file search


【解决方案1】:

它应该可以工作:

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

?>

【讨论】:

  • 感谢 Salim,很遗憾,它不起作用,仍然重复已打印的行。
  • 对不起,出现错误,已更正。它现在应该可以工作了。请再试一次。
  • 干杯!现在可以了!在询问之前,我尝试了类似的方法,将打印的行保存在一个数组中,然后在打印之前在循环中进行比较,但它并没有以我的方式工作,现在我知道我的错误是什么了。百万感谢萨利姆。
猜你喜欢
  • 2014-07-08
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多