2012-08-12 43 views
13

scandir();の機能が制限を超えるようにしようとしていますが、現在サポートしているアルファソートよりも多くの機能が必要です。私は、変更日でソートするscandir();結果をソートする必要があります。scandir()で日付をソートするように変更しました

私は私がここで見つけるいくつかのソリューションと異なるウェブサイトから他のいくつかの解決策を試してみたが、どれも私のために働いていないので、私は私がここに投稿することが合理的だと思います。私がこれまで試したどのような

はこれです:

function scan_dir($dir) 
{ 
    $files_array = scandir($dir); 
    $img_array = array(); 
    $img_dsort = array(); 
    $final_array = array(); 

    foreach($files_array as $file) 
    { 
     if(($file != ".") && ($file != "..") && ($file != ".svn") && ($file != ".htaccess")) 
     { 
      $img_array[] = $file; 
      $img_dsort[] = filemtime($dir . '/' . $file); 
     } 
    } 

    $merge_arrays = array_combine($img_dsort, $img_array); 
    krsort($merge_arrays); 

    foreach($merge_arrays as $key => $value) 
    { 
     $final_array[] = $value;  
    } 

    return (is_array($final_array)) ? $final_array : false; 
} 

しかし、これは私のために動作していないよう16があるので、それが唯一の3件の結果を返しますが、それは16件の結果を返す必要がありますフォルダ内の画像。

答えて

68
function scan_dir($dir) { 
    $ignored = array('.', '..', '.svn', '.htaccess'); 

    $files = array();  
    foreach (scandir($dir) as $file) { 
     if (in_array($file, $ignored)) continue; 
     $files[$file] = filemtime($dir . '/' . $file); 
    } 

    arsort($files); 
    $files = array_keys($files); 

    return ($files) ? $files : false; 
} 
+0

この方法を試してみてください@dugi。 1つのディレクトリ内のファイル名は一意でなければなりません。したがって、それらをキーとして使用することができます。配列は、値(更新時刻)でソートされたキー(ファイル名)が適切な順序で返されます。 –

+0

はそれを試してみましたが、魔法のように働きました。ありがとうございました。魔法のように – Aborted

+0

仕事! – BSQ

0

は、私はあなたの元のコードでの問題は、配列を合成する際、複数のファイルが同じ変更日付で複数のファイルのエントリが/時間が上書きされますので、同じ更新日付/時間を持つことができ、あなたが1つのつのみのエントリを取得しますだと思いますそのタイムスタンプの最終配列に格納します。

+0

は、私はあなたが何を意味するか理解しています。これを修正する方法はありますか? – Aborted

0

代替例..

$dir = "/home/novayear/public_html/backups"; 
chdir($dir); 
array_multisort(array_map('filemtime', ($files = glob("*.{sql,php,7z}", GLOB_BRACE))), SORT_DESC, $files); 
foreach($files as $filename) 
{ 
    echo "<a>".substr($filename, 0, -4)."</a><br>"; 
} 
関連する問題