0

whileループで一致が見つからない場合、「一致が見つかりません」という単一のエラーメッセージを表示しようとしています。現時点では、「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)
    ?>

助けてくれてありがとう!

4

4 に答える 4

1

match前と同じようfalseに while ループを設定し、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';
}
于 2012-10-18T05:01:22.530 に答える
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';
}
于 2012-10-18T04:59:09.523 に答える
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)
?>
于 2012-10-18T05:01:14.430 に答える
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 にとって役に立たない場合は申し訳ありません - 使用したことはありません)。

于 2012-10-18T05:01:20.030 に答える