不想向用户显示所有RecursiveDirectoryIterator文件

时间:2016-09-19 14:32:21

标签: php

我有一个用户输入文件名的表单。它遍历所有成功查找目录以匹配用户搜索输入到相关pdf文件的目录。

当它找到正确的匹配时,它会匹配'并打破了foreach循环。但是,它也正确地说明了“不匹配”。对于在匹配正确文件之前找到的所有文件。所以我得到了一长串“不匹配”的列表。然后是匹配'。

如果我回应" "而不是匹配'它工作正常,并没有显示任何东西,但我只想告诉用户他们输入的内容不匹配。我确信我忽略了一些基本的东西,但是对于如何实现这一目标,我们将非常感激。

这是我的代码。

<?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> 

1 个答案:

答案 0 :(得分:0)

我遗漏了一些代码,只显示了重要的部分。基本上只需设置一个变量,并在foreach完成时回显一次。

$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 ;