【问题标题】:Order by date extracted from filename按从文件名中提取的日期排序
【发布时间】:2014-01-24 11:57:01
【问题描述】:

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

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

文件名_2014.jpg
文件名_2013.jpg
文件名_2012.jpg
文件名_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);
    }
}

可能数组的第二个函数是异常的,但我在黑暗中爬行。

更新:

实际上数组打印为:

文件名_2011.jpg
文件名_2012.jpg
文件名_2013.jpg
文件名_2014.jpg

我想逆转它!有可能吗?

【问题讨论】:

  • 感谢所有 3 人!!!使用 krsort() 而不是 asort() 修复了 Satish 答案

标签: php arrays sorting filenames


【解决方案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);
    }
}

【讨论】:

  • 我收到“警告:为 foreach() 提供的参数无效”。有什么想法吗?
  • 我犯了一个愚蠢的错误,请查看我使用asort的更新答案
  • 好的,没有更多警告,但它会打印:
    file:filename_2012.jpg
    file:filename_2013.jpg
    2012
    2013
    我想要相反,但我没有在我的问题中写下它!对不起
  • krsort($array) 似乎解决了这个问题!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您将需要 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多