我有一个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行。我现在的问题是,我该怎么做才能避免打印已印刷的线?
谢谢,我感谢任何帮助。
答案 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
}
}
}
?>