0

我创建了这段代码来循环浏览当前目录中的文件夹并回显指向该文件夹的链接,一切正常。我将如何使用$blacklist数组作为数组来保存我不想显示的目录的目录名称

$blacklist = array('dropdown');

$results = array();
$dir = opendir("./");

while($file = readdir($dir)) {
    if($file != "." && $file != "..") {
        $results[] = $file;
    }
}

closedir($dir);

foreach($results as $file) {
    if($blocked != true) {
        $fileUrl = $file;
        $fileExplodedName = explode("_", $file);
        $fileName = "";
        $fileNameCount = count($fileExplodedName);

        echo "<a href='".$fileUrl."'>";

        $i = 1;

        foreach($fileExplodedName as $name) {
            $fileName .= $name." ";
        }       

        echo trim($fileName);
        echo "</a><br/>";
    }
}
4

2 回答 2

4

array_diff是完成这项工作的最佳工具——它写得最短,读起来很清楚,而且我希望它也是最快的。

$filesToShow = array_diff($results, $blacklist);
foreach($filesToShow as $file) {
    // display the file
}
于 2011-05-07T10:46:05.043 回答
2

为此使用in_array 。

$blocked = in_array($file, $blacklist);

请注意,这是相当昂贵的。in_array 的运行时复杂度是 O(n) 所以不要做一个大的黑名单。这实际上更快,但代码更“笨拙”:

$blacklist = array('dropdown' => true);
/* ... */
$blocked = isset($blacklist[$file]);

然后块检查的运行时复杂度降低到 O(1),因为数组(哈希图)是键查找的恒定时间。

于 2011-05-07T10:37:35.250 回答