2011-07-29 3 views
0

私は現在、指定されたディレクトリにあるファイルのすべての名前をphpで表示しています。
ファイルには、命名規則があります。
年生年月日_姓名

例:
1983_guptasiva.php:私は年によって最初にそれらをrsort、および出力があるべきように、各年以内にソートする必要が
1980_doejohn.php
1980_elfsarah.php
1981_fitzjack.php
1983_guptasiva.php

PHPでファイル名の2つの部分に基づいてファイルをソートしてrsortするにはどうすればよいですか?


1981_fitzjack.php
1980_doejohn.php
1980_elfsarah.php

私の現在の(非ソート)のコードは次のとおりです。

<?php 
$filename = glob("about/*.php"); 
rsort($filename); 
    foreach ($filename as $filenamein) { 
     echo ($filenamein) . "<br>"; 
    } 
?> 

どのように私はそれは私がそれを望むように並べ替える作ってそれを修正する必要がありますか?

答えて

0

これを含む独自の比較関数を作成し、を使用する必要があります。これは動作します:

$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)); 
} 
+0

ありがとうございました。完璧に動作しますが、実際には私の例のように、最近のものから最も古いものまでソートするのに何年もかかるでしょう。 1983_guptasiva.php、1981_fitzjack.php、1980_doejohn.php、1980_elfsarah.phpの代わりに、1980_doejohn.php、1980_delljohn.php、1981_fitzjack.php、1981_fitzjack.phpのようなコードを並べ替えます。 – amesguich

+0

コンピューター。 '(int)substr($ b、0、4)'の '$ a'と' $ b'を切り替えてみてください。 – Paulpro

関連する問題