2016-09-19 7 views
0

Ich habe ein Formular, in das der Benutzer einen Dateinamen eingibt. Es durchläuft alle Verzeichnisse, die erfolgreich suchen, um die Sucheingabe des Benutzers an die relevante PDF-Datei anzupassen.Ich möchte nicht alle RecursiveDirectoryIterator-Dateien für Benutzer anzeigen

Wenn die Übereinstimmung gefunden wird, stimmt sie korrekt mit der Übereinstimmung überein und bricht aus der foreach-Schleife aus. Es gibt jedoch auch korrekt "keine Übereinstimmung" für alle gefundenen Dateien an, bevor es mit der richtigen Datei übereinstimmt. Also bekomme ich eine lange Liste von "kein Match" gefolgt von "es passt".

Wenn ich "" anstelle von "keine Übereinstimmung" zurückgebe, funktioniert es gut und zeigt nichts an, aber ich möchte dem Benutzer nur einmal sagen, dass das, was sie eingegeben haben, nicht übereinstimmt. Ich bin mir sicher, dass ich etwas Grundlegendes übersehen habe, aber jede Hilfe würde sehr geschätzt werden, um dies zu erreichen.

Hier ist der Code, den ich habe.

<?php 
if (isset($_POST['submit']) && !empty($_POST['target'])) { 
    $searchInput = $_POST['target']; 
    $it = new RecursiveDirectoryIterator("/myDirectory/"); 

    foreach(new RecursiveIteratorIterator($it) as $file) {  
     $path_info = pathinfo($file); 
     $extension = $path_info['extension']; 

     if (strcmp("pdf", $extension) == 0) { 
      $lowerInput = strtolower($searchInput); 

      if (!empty($path_info)) { 
       $string = strtolower($path_info['filename']); 
       if(preg_match("~\b" . $lowerInput. "\b~", $string)) { 
        echo "it matches <br>"; 
        break; 
       } else { 
        if (!preg_match("~\b" . $lowerInput . "\b~", $string)) { 
         echo "not a match <br>"; 
        } 
       } 
      } 
     } 
    } //end foreach 
} // end if submit pressed 
?> 

<html> 
    <head> 
    </head> 
    <body> 
     <h3>Search Files</h3> 
     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="searchform"> 
      Type the File You Require:<br><br> 

      <input id="target" type="text" name="target" required > 
      <br> 
      <input id="submit" type="submit" name="submit" value="Search" > 
     </form> 
    </body> 
</html> 

Antwort

0

Ich habe etwas von Ihrem Code weggelassen, nur die Teile, die wichtig sind. Stellen Sie einfach eine Variable ein und wiederholen Sie sie einmal, wenn die foreach abgeschlossen ist.

$msg="Not a match <br>" ; 
foreach(new RecursiveIteratorIterator($it) as $file) { 
    ... 
    if(preg_match("~\b" . $lowerInput. "\b~", $string)) { 
     $msg = "it matches <br>" ; 
     break ; 
    } 
    // no need for an else clause, "not a match" is default finding 
}// end of foreach 
echo $msg ; 
+0

Danke funktioniert perfekt. Es macht durchaus Sinn, die else-Klausel zu entfernen. Danke noch einmal!!! – Harlin

Verwandte Themen