PHP阵列阻止列表

时间:2011-05-07 10:34:57

标签: php arrays blacklist

我已创建此代码以循环浏览当前目录中的文件夹并回显出该文件夹的链接,一切正常。我如何使用$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/>";
    }
}

2 个答案:

答案 0 :(得分:4)

array_diff是这项工作的最佳工具 - 它是写作最短,阅读非常清晰,而且我期望也是最快的。

$filesToShow = array_diff($results, $blacklist);
foreach($filesToShow as $file) {
    // display the file
}

答案 1 :(得分:2)

请使用in_array

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

请注意,这相当昂贵。 in_array的运行时复杂度为O(n),因此不要制作大的黑名单。这实际上更快,但更“笨拙”的代码:

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

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