在PHP中,如何根据文件名的两部分对文件进行排序和重新排序?

在PHP中,如何根据文件名的两部分对文件进行排序和重新排序?,php,regex,sorting,glob,Php,Regex,Sorting,Glob,我目前正在用php回显给定目录中所有文件的名称。 这些文件具有命名约定: 出生年份人姓名名 例如,1980\u doejohn.php 1980_elfsrah.php 1981_fitzjack.php 1983_guptasiva.php 我需要每年首先对它们进行排序,并在每年内进行排序,因此输出应为: 1983_guptasiva.php 1981_fitzjack.php 1980_doejohn.php 1980_elfsrah.php 我当前的(非排序)代码是: 我应该如何修改它

我目前正在用php回显给定目录中所有文件的名称。
这些文件具有命名约定:
出生年份人姓名名

例如,
1980\u doejohn.php
1980_elfsrah.php
1981_fitzjack.php
1983_guptasiva.php

我需要每年首先对它们进行排序,并在每年内进行排序,因此输出应为:
1983_guptasiva.php
1981_fitzjack.php
1980_doejohn.php
1980_elfsrah.php

我当前的(非排序)代码是:



我应该如何修改它以使其按我希望的方式排序?请提供完整的代码建议,包括您需要为此编写自己的比较函数并使用的

。这项工作:

$filename = glob("about/*.php");
usort($filename, 'filename_cmp');

foreach($filename as $filenamein)
    echo ($filenamein) . '<br />';

function filename_cmp($a, $b){
    $diff = (int)substr($b, 0, 4) - (int)substr($a, 0, 4);
    if($diff !== 0)
        return $diff;
    return strcmp(substr($a,5), substr($b,5));
}
$filename=glob(“about/*.php”);
usort($filename,'filename_-cmp');
foreach($filename为$filenamein)
echo($filenamein)。'
; 函数文件名\u cmp($a,$b){ $diff=(int)substr($b,0,4)-(int)substr($a,0,4); 如果($diff!==0) 返回$diff; 返回strcmp(substr($a,5),substr($b,5)); }
非常感谢您;这几乎是完美的,但我实际上需要几年的时间来从最近的到最老的排序,就像我的例子中那样。您的代码排序为:1980_doejohn.php、1980_elfsrah.php、1981_fitzjack.php、1983_guptasiva.php,而不是:1983_guptasiva.php、1981_fitzjack.php、1980_doejohn.php、1980_elfsrah。php@amesguich隐马尔可夫模型。。。它在我的电脑上分类正确。尝试在
(int)substr($b,0,4)
$filename = glob("about/*.php");
usort($filename, 'filename_cmp');

foreach($filename as $filenamein)
    echo ($filenamein) . '<br />';

function filename_cmp($a, $b){
    $diff = (int)substr($b, 0, 4) - (int)substr($a, 0, 4);
    if($diff !== 0)
        return $diff;
    return strcmp(substr($a,5), substr($b,5));
}