2011-09-10 17 views
0

私は、フォルダ内に制限とオフセット(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

scandirでループのないディレクトリ内のファイルの全リストを取得できます。 (array_sliceを使用して)

あなたはファイルの配列を取得した後は、あなたが(array_filterを使用して)フィルタリングの任意の種類を適用し、制限することができます

2

http://www.php.net/scandirは、おそらく自分でループを回避するための最良の方法です。

するのではなく、あなたもこの

$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 
} 
などの基本的なSTART/LIMITシステムを実装することができますしたい場合
関連する問題