2010-02-24 107 views

回答

8

保存自己的信息到一个数组,数组

if($h = opendir($dir)) { 
    $files = array(); 
    while(($file = readdir($h) !== FALSE) 
    $files[] = stat($file); 

    // do the sort 
    usort($files, 'your_sorting_function'); 

    // do something with the files 
    foreach($files as $file) { 
    echo htmlspecialchars($file); 
    } 
} 
2

嘿排序的数组,然后循环,甚至不是很大DirectoryIterator能做到开箱即用。叹。

似乎有一个非常强大的脚本来完成这里引用的所有内容:preg_find。我从来没有使用它,但它看起来不错。

sorted in by filesize, in descending order? 
$files = preg_find('/./', $dir, 
    PREG_FIND_RECURSIVE| PREG_FIND_RETURNASSOC | 
    PREG_FIND_SORTFILESIZE|PREG_FIND_SORTDESC); 

$files=array_keys($files); 
0

你可以使用scandir()读取目录的内容到一个数组,然后使用fileatime()filectime()看到每个文件的访问或创建时间,分别。从这里排序数组不应该太难。

3

您可以将文件存储在数组中,其中键为文件名,值为要排序的值(即创建日期),并在该阵列上使用asort()

$files = array(
    'file1.txt' => 1267, 
    'file3.txt' => 1267011892, 
    'file2.txt' => 1266971321, 
); 
asort($files); 
var_dump(array_keys($files)); 
# Output: 
array(3) { 
    [0]=> 
    string(9) "file2.txt" 
    [1]=> 
    string(9) "file3.txt" 
    [2]=> 
    string(9) "file1.txt" 
} 
-2

使用shell_exec在os级执行命令?在linux/unix盒子上这可能会工作;

$output=shell_exec('ls -t1'); 
+3

...请不要。 – knittl 2010-02-24 12:22:57

5

这是我的解决方案:

$fileList = array(); 
$files = glob('home/dir/*.txt'); 
foreach ($files as $file) { 
    $fileList[filemtime($file)] = $file; 
} 
ksort($fileList); 
$fileList = array_reverse($fileList, TRUE); 
print_r($filelist); 

输出是这样的:然后用 “foreach” 循环

array(
    (int) 1340625301 => '/home/dir/file15462.txt', 
    (int) 1340516112 => '/home/dir/file165567.txt', 
    (int) 1340401114 => '/home/dir/file16767.txt' 
) 

把你需要的文件。

+0

让我们希望您的文件在同一秒的unix时间内都不会被修改。 – salathe 2012-06-25 17:42:36

+0

@salathe好点! – trante 2012-06-25 17:51:53

+0

我用以下代码替换了foreach body line: $ fileList [filemtime($ file)。$ file] = $ file; 它解决了这个问题。我的印象是这个字符串的重要转换也使得我的300k文件的ksort快得多。 – 2014-01-14 14:08:05