php strpos 在文本文件中缺少匹配项
php strpos missing matches in text file
我有一段代码在文本文件中搜索电子邮件地址,return在同一行输入这两个数字。
该文件如下所示:
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 不会 return 匹配,但 test@test.ie 会。我错过了什么阻止它出现比赛?
找到答案后并没有终止循环,这意味着它会继续 运行,即使找到匹配项并覆盖之前的任何匹配项也是如此。在分配 $foundGroup
和 $foundVideo
后添加 break;
。
您还有两个评估检查同一件事。在循环开始时将 $found
标志设置为 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
}
}
这其实很容易理解。
it only finds matching emails if they were the last entered
这是真的。为什么?因为您总是将 $found
设置为 false
,除非您要搜索的电子邮件地址是最后一个。即使您找到了匹配项,您也只是继续循环并用 false
.
覆盖 $found
看看this snippet,看看你能不能想出来。
你要么跳出循环,要么停止这样设置$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!
}
}
我有一段代码在文本文件中搜索电子邮件地址,return在同一行输入这两个数字。 该文件如下所示:
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 不会 return 匹配,但 test@test.ie 会。我错过了什么阻止它出现比赛?
找到答案后并没有终止循环,这意味着它会继续 运行,即使找到匹配项并覆盖之前的任何匹配项也是如此。在分配 $foundGroup
和 $foundVideo
后添加 break;
。
您还有两个评估检查同一件事。在循环开始时将 $found
标志设置为 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
}
}
这其实很容易理解。
it only finds matching emails if they were the last entered
这是真的。为什么?因为您总是将 $found
设置为 false
,除非您要搜索的电子邮件地址是最后一个。即使您找到了匹配项,您也只是继续循环并用 false
.
$found
看看this snippet,看看你能不能想出来。
你要么跳出循环,要么停止这样设置$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!
}
}