如果在while循环中找不到匹配项,我正在尝试显示单个错误消息“Match not found”。目前,我知道如果我在其中放入一个“else”语句,它只会为每一行显示“Match not found”,直到它到达循环结束。
这是我到目前为止所拥有的:
<?php
$filename = "roster.txt";
$fp = fopen($filename, "r") or die("Couldn't open $filename");
while(!feof($fp))
{ $line = fgets($fp);
if (preg_match('/Navi/',$line)) {
print "$line<br>";
}
}
fclose($fp)
?>
感谢您的帮助!
答案 0 :(得分:1)
在while循环之前将match
设置为false
,并在找到匹配时将其设置为true
。
while循环检查match
变量之后。
$match = false;
while(!feof($fp))
{ $line = fgets($fp);
$answer = str_replace(":"," ",$line);
if ((preg_match("/$lastname/",$line)) && (preg_match("/$id/",$line))) {
$match = true;
print "$answer<br>";
}
}
if ($match === false) {
echo 'Match not found';
}
答案 1 :(得分:0)
我累了......这可能不是最优雅的方式,但它应该有效。
$x=0;
while(!feof($fp))
{ $line = fgets($fp);
$answer = str_replace(":"," ",$line);
if ((preg_match("/$lastname/",$line)) && (preg_match("/$id/",$line))) {
print "$answer<br>";
$x = $x+1;
}
}
if($x==0) {
echo 'No match found';
}
答案 2 :(得分:0)
我会使用布尔值来跟踪找到 的值,然后使用它来选择性地显示未找到 的消息:
<?php
$filename = "roster.txt";
$fp = fopen($filename, "r") or die("Couldn't open $filename");
$lastname = $_GET['lastname'];
$id = $_GET['id'];
// variable to track if any matches are found, initialize to false
$found = false;
while(!feof($fp)){
$line = fgets($fp);
$answer = str_replace(":"," ",$line);
if ((preg_match("/$lastname/",$line)) && (preg_match("/$id/",$line))) {
print "$answer<br>";
// when a match is found, set to true
$found = true;
}
}
// If no matches were found, show the error message
if (!$found) print "Match not found";
fclose($fp)
?>
答案 3 :(得分:0)
创建一个局部变量以跟踪是否找到匹配。例如,在伪代码中:
int match_is_found = 0
loop :
// do stuff
if match was found:
match_is_found = 1
end loop
if match_is_found is 0:
display error message
(抱歉,如果这对PHP没有帮助 - 从未使用过它)。