按文件名提取的日期排序

时间:2014-01-24 11:57:01

标签: php arrays sorting filenames

我正在尝试按年份排序结果,即从文件名中提取的年份。

这些是我正在扫描的文件夹中的N个文件:

  

filename_2014.jpg
  filename_2013.jpg
  filename_2012.jpg
  filename_2011.jpg
  ....
  ....

所以我写了这个函数:

function Archivize() {
    $path = opendir('./');

    while($read = readdir($path)) {
            if($read != '.' && $read != '..') {
                $filename = current(explode(".", $read));
                $getYear = substr($filename, -4);
                ?>
                     <span class="year"><?php echo $getYear ?></span>
                <?php
            }
    }
     closedir($path);
}

它基本上有效,但我不知道如何按照从文件名中提取的年份来排序结果。

我读到最好的方法是使用数组然后sort(),但我真的无法弄清楚如何将这个提示应用到我的函数中。

function Archivize() {
    $path = opendir('./');

    $filesArray = array(); //just defining the array

    if ($handle = $path) {
        $loop = 1;
        while($read = readdir($path)) {
            if($read != '.' && $read != '..') {
                $filename = current(explode(".", $read));
                $getYear = substr($filename, -4);
                ?>
                    <span class="year"><?php echo $getYear ?></span>
                <?php
                echo "file:$read<br/>";
                $filesArray[] = $getYear;   //add the file into the files array
                $loop++;
            }
        }
            closedir($path);
    }
}

阵列的第二个功能可能是一个像差,但我在黑暗中爬行。

更新

实际上,数组打印为:

  

filename_2011.jpg
  filename_2012.jpg
  filename_2013.jpg
  filename_2014.jpg

我想扭转它!有可能吗?

3 个答案:

答案 0 :(得分:1)

查看asort function和关联数组。对于您的情况,您需要使用文件名作为键,并将提取的年份作为值。

答案 1 :(得分:1)

您可以使用asort将它们存储在数组和排序数组中,然后像这样打印

function Archivize() {
    $path = opendir('./');

    $filesArray = array(); //just defining the array

    if ($handle = $path) {
        $loop = 1;
        while($read = readdir($path)) {
            if($read != '.' && $read != '..') {
                $filename = current(explode(".", $read));
                $getYear = substr($filename, -4);

                echo "file:$read<br/>";
                $filesArray[] = $getYear;   //add the file into the files array
                $loop++;
            }
        }

       asort($filesArray);
       foreach($filesArray as $n_year)
       {
       ?>
            <span class="year"><?php echo $n_year?></span><br/>
       <?php
       } 
            closedir($path);
    }
}

答案 2 :(得分:1)

你需要2个循环。

一个用于向阵列添加文件,另一个用于将内容写入屏幕。

$path = opendir('./');
$list = array()
while($read = readdir($path)){
    if(substr($read, 0, 1) == '.')
        continue;

    $year = substr(basename($read, ".jpg"), -4);
    $list[$year] = $read;
}
closedir($path);

krsort($list); //using krsort to sort by keys (the years from most recent to older in this case)

foreach($list as $year => $filename){
    ?><span class="year"><?php echo $year ?></span><?php echo $filename;
}