我已经编写了一些代码来打印带有限制和偏移的文件夹内的文件(比如MySQL的LIMIT
)。
我的代码:
/*
files:
.
..
read.txt
*/
$dir = "lab";
$limit = 2;
$file_id = 1;
$start = 1;
$files = array();
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
if($file_id > $start and $file_id >= $limit){
$files[$file_id] = $filename;
}
$file_id++;
}
print_r($files);
/*
files:
Array ( [2] => .. [3] => read.txt )
*/
我的文件夹可能包含1000个或更多文件,并且将为每个访问者执行此功能。
所以我想在没有循环的情况下完成这项工作,这可能吗?如果不是,有没有办法让这更快?
答案 0 :(得分:2)
http://www.php.net/scandir可能是避免自行循环的最好方法。
如果你愿意,你也可以实现像这样的基本START / LIMIT系统
$start = 5;
$limit = 20;
$thisFile = 0;
while (false !== ($filename = readdir($dh))) {
// Check the start
if ($thisFile < $start)
continue;
$thisFile++;
// Check the end
if ($thisFile > $limit)
break;
// Your other code can go in here
}
答案 1 :(得分:0)
您可以检索目录中的整个文件列表,而不使用scandir的任何循环。
检索完一系列文件后,您可以应用任何类型的过滤(使用array_filter)和限制(使用array_slice)