Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何排列使用PHP显示的文件 一般下载 会议信息 时事通讯 历法_Php_File Management - Fatal编程技术网

如何排列使用PHP显示的文件 一般下载 会议信息 时事通讯 历法

如何排列使用PHP显示的文件 一般下载 会议信息 时事通讯 历法,php,file-management,Php,File Management,是代码,它显示特定文件夹中的所有文件,并允许您下载这些文件。它们目前按名称排列,我想先用最新的。。。帮助?查看: 基本上组成一个二维数组,如下所示: function getFilesByCreationDate($dir) { $dir = rtrim($dir, '/'); $handler = opendir($dir); while (false !== ($file = readdir($handler))) { if ($file != "."

是代码,它显示特定文件夹中的所有文件,并允许您下载这些文件。它们目前按名称排列,我想先用最新的。。。帮助?

查看:

基本上组成一个二维数组,如下所示:

function getFilesByCreationDate($dir) {
    $dir = rtrim($dir, '/');
    $handler = opendir($dir);
    while (false !== ($file = readdir($handler))) {
        if ($file != "." && $file != "..") {
            $files[] = array(
                filectime($dir.'/'.$file),
                $file
            );
        }
    }
    closedir($handler);
    usort($files, create_function('$a, $b', 'return $a[0] - $b[0];'));
    foreach ($files as &$file) {
        $file = $file[1];
    }
    return $files;
}
数组:

[0]文件 [0]时间

[1] 文件 [1] 时间

[2] 文件 [2] 时间


依此类推,使用filemtime()返回的时间是UNIX格式的。因此,您可以轻松创建一个循环,按“时间”对列表进行排序。

如果您的文件列表足够小,您可以将它们读入数组,我要做的是将它们读入所述数组,然后与自定义比较函数一起使用,以确定哪个文件较新

usort
的参数是数组本身,以及一个回调函数,它指定一个函数,该函数本身接收数组中的两个元素作为参数,如果第一个参数小于第二个,则返回负值;如果第一个参数大于第二个,则返回0;如果第一个参数大于第二个,则返回正值。

您必须:

  • 首先,获取文件列表,其中包含每个文件的最后修改日期(可以使用
  • 然后,使用一个用户函数对该列表进行排序,该函数根据数组中的“日期”字段进行排序(要使用用户定义的函数进行排序,请参阅)
  • 最后,显示列表
例如,要首先获取文件列表,请执行以下操作:

<div style="width: 49%; height: 300px; float: left; padding-top: 10px; ">

<h2><img src="downloads/general.png"></h2>

    <h1>General Downloads</h1>
    <?php
    $Dirdownloads = opendir('downloads/general');
while (false !== ($file = readdir($Dirdownloads))) {
    if ($file != "." && $file != "..") {
        $files[] = array(
            filemtime('downloads/general/'.$file),
            $file
        );
    }
}
closedir($Dirdownloads);
usort($files, create_function('$a, $b', 'return $a[0] - $b[0];'));
foreach ($files as $file) {
    echo '<a href="downloads/general/'.$file[1].'">'.$file[1].'</a><br />';
}
 ?>
 </div>

<div style="width: 49%; height: 300px; float: right; padding-top: 10px; ">

<h2><img src="downloads/conference.jpg"></h2>

    <h1>Conference Information</h1>
 <?php
    $Dirdownloads = opendir('downloads/conference');
while (false !== ($file = readdir($Dirdownloads))) {
    if ($file != "." && $file != "..") {
        $files[] = array(
            filemtime('downloads/conference/'.$file),
            $file
        );
    }
}
closedir($Dirdownloads);
usort($files, create_function('$a, $b', 'return $a[0] - $b[0];'));
foreach ($files as $file) {
    echo '<a href="downloads/conference/'.$file[1].'">'.$file[1].'</a><br />';
}
 ?>
 </div>

<div style="width: 49%; height: 300px; float: left; padding-top: 10px; ">

<h2><img src="downloads/newsletter.jpg"></h2>

    <h1>Newsletters</h1>
 <?php
    $Dirdownloads=opendir('downloads/newsletters');
    while (false !== ($file = readdir($Dirdownloads))) {
    if($file != "." && $file != ".."){
        echo '<a href="downloads/newsletters/'.$file.'">'.$file.'</a><br />';
    }
    }
    closedir($Dirdownloads);
 ?>
 </div>

<div style="width: 49%; height: 300px; float: right; padding-top: 10px; ">

<h2><img src="downloads/calendar.png"></h2> 

<h1>Calendar</h1>
 <?php
    $Dirdownloads=opendir('downloads/calendars');
    while (false !== ($file = readdir($Dirdownloads))) {
    if($file != "." && $file != ".."){
        echo '<a href="downloads/calendars/'.$file.'">'.$file.'</a><br />';
    }
    }
    closedir($Dirdownloads);
 ?>
 </div>
注意,对于每个文件,我都有一个数组,其中包含“
name
”和“
date

然后,对它们进行排序:

$files = array();

$dir = dirname(__FILE__);
$Dirdownloads=opendir($dir);
while (false !== ($file = readdir($Dirdownloads))) {
    if($file != "." && $file != ".."){
        $files[] = array(
            'name' => $file,
            'date' => filemtime($dir . '/' . $file),
        );
    }
}
closedir($Dirdownloads);
以及基于“
date
”字段比较文件的排序函数:

usort($files, 'my_sort_function');
这样,
$file
数组应该包含您想要的内容:-)

根据您想要的顺序,您可以使用
收集阵列中的文件,按创建日期排序,然后打印:

function my_sort_function($a, $b) {
    if ($a['date'] == $b['date']) {
        return 0;
    }
    return ($a['date'] > $b['date']) ? -1 : 1;
}
然后您可以像这样使用该函数:

function getFilesByCreationDate($dir) {
    $dir = rtrim($dir, '/');
    $handler = opendir($dir);
    while (false !== ($file = readdir($handler))) {
        if ($file != "." && $file != "..") {
            $files[] = array(
                filectime($dir.'/'.$file),
                $file
            );
        }
    }
    closedir($handler);
    usort($files, create_function('$a, $b', 'return $a[0] - $b[0];'));
    foreach ($files as &$file) {
        $file = $file[1];
    }
    return $files;
}
$dir='downloads/general';
$files=getFilesByCreationDate($dir);
foreach($files作为$file){
回声“
”; }
是的,列表中大约有5个文件。。。但是,我在每页上有4个列表。你能发布实际代码对它们进行排序吗?这个php的东西让我困惑:Pstat()会产生额外的数据,这会导致性能降低(尽管可以忽略不计)。我会使用filemtime(),除非steven打算显示stat()提供的额外文件详细信息。嗯,现在它不适用于我在页面上的其他文件(我在页面上有4个类别,每个类别显示4个文件夹)。我已附加了整个页面的代码。。。。。请编辑/添加我做错的任何内容。该页面现在显示在原始问题中。坦斯克!很抱歉听起来像NeWB,但是我该怎么做呢?随着你处理排序顺序,你可以考虑从重复的代码块中创建一个函数,并将目录名作为一个与HTML气味混合的AgMuth.PHP。
$dir = 'downloads/general';
$files = getFilesByCreationDate($dir);
foreach ($files as $file) {
    echo '<a href="'.$dir.'/'.$file.'">'.$file.'</a><br />';
}