我有一段代码在文本文件中搜索电子邮件地址,并在同一行返回两个数字。 该文件看起来像:
range.location = /* some new value */;
AXValueRef newValue = AXValueCreate(kAXValueTypeCFRange, &range);
if (newValue)
{
AXError setError = AXUIElementSetAttributeValue(focussedElement, kAXSelectedTextRangeAttribute, newValue);
/* check setError and handle as appropriate */
CFRelease(newValue);
}
else
/* handle failure */;
我的代码目前看起来像
24/08/2017,email@test.ie,1,2
21/05/2018,test@234.com,1,2
21/05/2018,test@test.ie,2,2
当我运行此代码时,通过一个HTML表单接收要搜索的电子邮件地址,它只查找匹配的电子邮件,如果它们是最后输入的 - 在上面的示例中,test @234.com将不会返回比赛,但test@test.ie会。我错过了什么阻止它出现比赛?
答案 0 :(得分:1)
当您找到答案时,您不会终止循环,这意味着即使找到匹配并覆盖之前的任何匹配,它也会继续运行。在您分配break;
和$foundGroup
后添加$foundVideo
。
您还有两个评估检查相同的事情。在循环开始时将$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
}
}
答案 1 :(得分:0)
这实际上很容易理解。
如果它们是最后输入的
,它只会找到匹配的电子邮件
这是事实。为什么?因为您始终将$found
设置为false
,除非您要搜索的电子邮件地址是最后一个。即使您找到匹配项,也只是继续循环并使用$found
覆盖false
。
看一下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!
}
}