php strpos在文本文件中缺少匹配项
我有一段代码在文本文件中搜索电子邮件地址,在同一行返回两个数字。 该文件看起来像:php strpos在文本文件中缺少匹配项,php,strpos,Php,Strpos,我有一段代码在文本文件中搜索电子邮件地址,在同一行返回两个数字。 该文件看起来像: 24/08/2017,email@test.ie,1,2 21/05/2018,test@234.com,1,2 21/05/2018,test@test.ie,2,2 我的代码目前看起来像 $lines = file("log.txt"); $found = 0; foreach ($lines as $line){ if (strpos($line, $email) !==false
24/08/2017,email@test.ie,1,2
21/05/2018,test@234.com,1,2
21/05/2018,test@test.ie,2,2
我的代码目前看起来像
$lines = file("log.txt");
$found = 0;
foreach ($lines as $line){
if (strpos($line, $email) !==false){
$found = true;
$arrayOfLine = explode(",", $line);
$foundGroup = $arrayOfLine[2];
$foundVideo = $arrayOfLine[3];
}
elseif (strpos($line, $email) ===false){
$found = false;
}
}
当我运行这段代码时,通过一个HTML表单接收要搜索的电子邮件地址,它只会在最后输入的电子邮件中找到匹配的电子邮件-在我上面的示例中,test@234.com我不回火柴,但是test@test.ie将我错过了什么阻止它出现比赛 当您找到答案时,您并没有终止循环,这意味着即使找到了匹配项并覆盖了以前的任何匹配项,循环仍将继续运行。添加一个
break分配$foundGroup
和$foundVideo
后的code>
您还有两个评估来检查相同的内容。在循环开始时,将$found
标志设置为false
。如果您的循环找不到匹配项,它仍然是false。你不需要两次比较
$found = false;
foreach ($lines as $line){
if (strpos($line, $email) !==false){
$found = true;
$arrayOfLine = explode(",", $line);
$foundGroup = $arrayOfLine[2];
$foundVideo = $arrayOfLine[3];
break; // stop searching for more matches
}
}
这其实很容易理解
它只会在最后输入的电子邮件中查找匹配的电子邮件
这是真的。为什么?因为您总是将$found
设置为false
,除非您搜索的电子邮件地址是最后一个。即使找到了匹配项,也只是继续循环并用false
覆盖$found
看一看,看看你能不能弄明白
您需要中断循环,或者停止以这种方式设置$found
foreach ($lines as $line){
if (strpos($line, $email) !==false) {
$found = true;
$arrayOfLine = explode(",", $line);
$foundGroup = $arrayOfLine[2];
$foundVideo = $arrayOfLine[3];
}
elseif (strpos($line, $email) ===false) {
$found = false; // This will be run every loop!
}
}
我不知道你在用$found
变量做什么,但是:@Mike这只是较大代码的一部分,总体目的是创建列表,但我不能有重复项,所以这部分搜索匹配项,如果找到匹配项,则会显示该电子邮件已存在于文件中。即使找到匹配项,此代码仍将继续搜索电子邮件地址,这是低效的。这正是我在回答中描述的。不确定你的意思。你的两个例子都有相同的错误。无论哪种方式,如果你的答案是让OP“弄明白”,那么我想你可以在stackoverflow上的每个答案上都写上。也许吧。OP的问题是我错过了什么,这阻止了它出现比赛?这就是我解释的。虽然没有给出一段工作代码,这是真的。