通过平面黑名单数组过滤平面数组

问题描述 投票:0回答:2

我创建了这段代码来循环浏览当前目录中的文件夹并回显该文件夹的链接,一切正常。我将如何使用

$blacklist
数组作为数组来保存我不想显示的目录的目录名称? <?php $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/>"; } }

	
php arrays filter array-difference blacklist
2个回答
4
投票

array_diff

是这项工作的最佳工具——它写起来最短,读起来非常清晰,而且我希望也是最快的。
$filesToShow = array_diff($results, $blacklist); foreach($filesToShow as $file) { // display the file }



2
投票
in_array

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.