2013-10-20 65 views
0

我正在嘗試編寫一個返回函數以及按修改時間排序的文件名的數組。 儘管我只想獲取特定數量的文件,而不是目錄中的整個文件。 總之,我想得到一個數組,其中包含來自目錄的最新X文件。從一個目錄中獲取特定數量的文件,修改時間

這是我的代碼:

public static function GetPicsDir() 
    { 
     $results = array(); 
     $handler = opendir("pics"); 
     while ($file = readdir($handler)) { 
      if ($file != "." && $file != "..") { 
      $results[] = $file; 
      } 
     } 
     closedir($handler); 
     return $results; 
    } 

我不知道如何修改時間來限制它和秩序。 我很樂意得到任何幫助。

謝謝

回答

0

可以使用array_multisort排序按日期SORT_DESC使用glob

$date = strtotime('2013-01-10 10:00:00');//The date from you want to get the files 
$matches = glob('dir/*.*'); 
$result=array(); 
if (is_array($matches)) { 
    $a=0; 
    foreach ($matches as $filename) { 
    if (filemtime($filename) >= $date) {//only output file >= your $date 
     $result[$a]['FileName'] = $filename; 
     $result[$a]['DateCreated'] = gmdate("Y-m-d H:i:s", filemtime($filename)); 
    } 
     $a++; 
    } 
} 

if(count($result)>=2){//order array if it has at least 1 match 
    foreach ($result as $key => $row) { 
     $new_array[$key] = $row['DateCreated']; 
    } 
array_multisort($new_array,SORT_DESC,$result);//Show most recent first 
} 

echo '<pre>'; 
print_r($result); 
echo '<pre>'; 

輸出:

Array 
(
    [0] => Array 
     (
      [FileName] => test.php 
      [DateCreated] => 2013-10-20 05:43:06 
    ) 

    [1] => Array 
     (
      [FileName] => test.sql 
      [DateCreated] => 2013-09-20 23:38:05 
    ) 

    [2] => Array 
     (
      [FileName] => general.php 
      [DateCreated] => 2013-09-02 00:58:33 
    ) 

) 
1

使用filemtime()

public static function GetPicsDir() 
{ 
    $results = array(); 
    $handler = opendir("pics"); 
    while ($file = readdir($handler)) { 
     if ($file != "." && $file != "..") { 
     $results[$time] = filemtime($file); 
     } 
    } 
    arsort($results); 
    closedir($handler); 
    return $results; 
} 
+0

我得到這個錯誤幾聲:警告:filemtime():Stat失敗在C 00a0a75d63ceb4fbc898d1e7e320e129.png:\ XAMPP \ htdocs中\項目\類\ Pics.php線136 – Nero

+0

@Nero:聽起來像是一個文件編碼問題。你可以嘗試'filemtime(utf8_decode($ file));'而不是。 –

0

如果你只是想通過最後修改日期的文件進行排序,你可以使用

ftp_nlist($conn, '-t .'); 

這不會告訴你每個文件的日期是什麼,但。

如果你想修改日期,以及,你可以使用ftp_rawlist和解析輸出。下面是一個簡單的例子,我張羅:

$list = ftp_rawlist($ftp, '.'); 

$results = array(); 
foreach ($list as $line) { 
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) = 
     preg_split('/\s+/', $line, 9); 
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3))); 
    $results[] = array('name' => $name, 'timestamp' => $stamp); 
} 

usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; }); 

此時$結果包含在上升最後修改時間排序的列表;反轉排序功能以最近修改的第一種格式獲取列表。

相關問題