0

假设我有一个包含以下文件的目录,按日期(月、日和年)命名。

030313.pdf 030513.pdf 040113.pdf 052013.pdf

我知道可以使用explode() 来打破文件名,我假设我需要以某种方式将数据保存到这样的多维数组中:

$files = array
(
array("030313.pdf", 03,03,13),
array("030513.pdf", 03,05,13),
array("040113.pdf", 04,01,13),
array("052013.pdf", 05,20,13)
);

然后是否可以按月分组,按天排序,然后将其作为链接的项目符号列表回显出来?

就像是:

2013 年 3 月:

  • 03/03/2013(链接到实际文件)
  • 2013 年 3 月 5 日(链接到实际文件)

2013年4月:

  • 2013 年 4 月 1 日(链接到实际文件)

2013 年 5 月:

  • 2013 年 5 月 20 日(链接到实际文件)

如果这是可能的,假设有 100-1000 个文件,加载此页面会导致任何服务器性能问题吗?

谢谢

布雷特

4

2 回答 2

1

解决方案非常简单:

$files = array
(
    array("030313.pdf", 03,03,13),
    array("030513.pdf", 03,05,13),
    array("040113.pdf", 04,01,13),
    array("052013.pdf", 05,20,13)
);

$sortedData = array();

foreach ($files as $file) {
    $dt = mktime(0, 0, 0,  $file[1], 1, 2000);
    $key = date('F', $dt) . ' ' . $file[3];
    if (array_key_exists($key, $sortedData)) {
        $sortedData[$key] []= $file;
    } else {
        $sortedData[$key] = array($file);
    }
}


function sortFunc($a, $b) {
    if ($a[2] > $b[2]) {
        return 1;
    } else if ($a[2] < $b[2]) {
        return -1;
    } 
    return 0;
}

foreach ($sortedData as &$sd) {
    usort($sd, sortFunc);
}


foreach ($sortedData as $key => $data) {
    echo "<h1>".$key."</h1>\n";
    foreach ($data as $d) {
        echo $d[0]."\n";
    }
}

只需重新格式化输出。

性能主要取决于服务器上使用的文件系统。重新调整 1000 个元素的数组通常没什么。

于 2013-03-29T15:55:29.027 回答
1

给你,刚刚更新它以订购它们(我第一次阅读你的帖子时错过了这个。)

<?php

$files = array
(
    array("030313.pdf", 03,03,13),
    array("030513.pdf", 03,05,13),
    array("040113.pdf", 04,01,13),
    array("052013.pdf", 05,20,13)
);

$newArray = array();


foreach($files AS $file => $val){
        $newArray[$date = date('Ym', strtotime($val[1] . '/' . $val[2] . '/' . $val[3]))][] = $val[0];  
}

ksort($newArray);

$list = '<ul>';
foreach($newArray AS $key => $val){

    $list .= '<li>' . date('F Y', strtotime('01-' . substr($key, 4, 2) . '-' . substr($key, 0, 4)));

    if(is_array($val)){
        $list .= '<ul>';
        foreach($val AS $file => $filename){

            $list .= '<li><a href="' . $filename . '">Download ' . $filename . '</a></li>';

        }
        $list .= '</ul>';
    }
    $list .= '</li>';

}

$list .= '</ul>';

echo $list;

?>
于 2013-03-29T16:24:02.550 回答