PHP로 날짜별로 파일 정렬
PHPPHP로 날짜별로 파일 정렬
나는 현재 index.php 파일을 가지고있어서 같은 디렉토리 안에있는 파일들의 목록을 출력 할 수있다. 출력은 파일 이름을 보여 주며, filemtime () 함수를 사용하여 파일이 수정 된 날짜를 보여준다. 내 문제는 지금 어떻게 출력을 정렬하여 최신 수정 된 파일을 표시 할 것인가입니다. 잠시 그 방법을 생각해 보았습니다. 만약 내가 mysql 상호 작용으로 그것을하고있다면 전혀 문제가 없을 것이다. 가장 최근에 수정 된 파일 목록을 정렬하고 출력하는 방법을 보여주십시오. 이게 내가 가진거야.
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$lastModified = date('F d Y, H:i:s',filemtime($file));
if(strlen($file)-strpos($file,".swf")== 4){
echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
}
}
}
closedir($handle);
}
해결법
-
==============================
1.마지막으로 수정 된 파일을 정렬하고 찾기 위해 배열에 파일을 넣어야합니다.
마지막으로 수정 된 파일을 정렬하고 찾기 위해 배열에 파일을 넣어야합니다.
$files = array(); if ($handle = opendir('.')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $files[filemtime($file)] = $file; } } closedir($handle); // sort ksort($files); // find the last modification $reallyLastModified = end($files); foreach($files as $file) { $lastModified = date('F d Y, H:i:s',filemtime($file)); if(strlen($file)-strpos($file,".swf")== 4){ if ($file == $reallyLastModified) { // do stuff for the real last modified file } echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>"; } } }
테스트를 거치지는 않았지만 그렇게하는 방법입니다.
-
==============================
2.이것은 .swf 확장자를 가진 path / to / files의 모든 파일을 배열로 가져온 다음 파일의 mtime으로 배열을 정렬합니다.
이것은 .swf 확장자를 가진 path / to / files의 모든 파일을 배열로 가져온 다음 파일의 mtime으로 배열을 정렬합니다.
$files = glob('path/to/files/*.swf'); usort($files, function($a, $b) { return filemtime($a) < filemtime($b); });
위의 코드는 Lambda 함수를 사용하며 PHP 5.3이 필요합니다. 5.3 이전에는
usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));
익명의 함수를 사용하고 싶지 않다면, 콜백을 일반 함수로 정의하고 대신 함수 이름을 usort에 전달할 수 있습니다.
결과 배열을 사용하면 다음과 같이 파일을 반복합니다.
foreach($files as $file){ printf('<tr><td><input type="checkbox" name="box[]"></td> <td><a href="%1$s" target="_blank">%1$s</a></td> <td>%2$s</td></tr>', $file, // or basename($file) for just the filename w\out path date('F d Y, H:i:s', filemtime($file))); }
파일을 정렬 할 때 이미 filemtime을 호출했기 때문에 stat 캐시로 인해 foreach 루프에서 다시 호출 할 때 추가 비용이 들지 않습니다.
-
==============================
3.RecursiveDirectoryIterator 클래스를 사용하는 예제는 파일 시스템을 반복적으로 반복하는 편리한 방법입니다.
RecursiveDirectoryIterator 클래스를 사용하는 예제는 파일 시스템을 반복적으로 반복하는 편리한 방법입니다.
$output = array(); foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( 'path', FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ) ) as $value ) { if ( $value->isFile() ) { $output[] = array( $value->getMTime(), $value->getRealPath() ); } } usort ( $output, function( $a, $b ) { return $a[0] > $b[0]; });
-
==============================
4.나는 당신의 정확한 제안 된 코드를 오직 몇 개의 추가 라인과 함께 사용한다. 이 아이디어는 @elias가 제안한 것과 거의 같지만이 솔루션에서는 디렉토리의 각 파일마다 다른 파일 이름이 있으므로 키에 충돌이 없어 충돌을 해결할 수 있습니다. 키의 첫 번째 부분은 사전 식으로 두 개를 비교할 수있는 방식으로 형식화 된 날짜 / 시간 문자열입니다.
나는 당신의 정확한 제안 된 코드를 오직 몇 개의 추가 라인과 함께 사용한다. 이 아이디어는 @elias가 제안한 것과 거의 같지만이 솔루션에서는 디렉토리의 각 파일마다 다른 파일 이름이 있으므로 키에 충돌이 없어 충돌을 해결할 수 있습니다. 키의 첫 번째 부분은 사전 식으로 두 개를 비교할 수있는 방식으로 형식화 된 날짜 / 시간 문자열입니다.
if ($handle = opendir('.')) { $result = array(); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $lastModified = date('F d Y, H:i:s',filemtime($file)); if(strlen($file)-strpos($file,".swf")== 4){ $result [date('Y-m-d H:i:s',filemtime($file)).$file] = "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>"; } } } closedir($handle); krsort($result); echo implode('', $result); }
-
==============================
5.$ files = array_diff (scandir ($ dir, SCANDIR_SORT_DESCENDING), 배열 ( '..', '.')); print_r ($ 파일);
$ files = array_diff (scandir ($ dir, SCANDIR_SORT_DESCENDING), 배열 ( '..', '.')); print_r ($ 파일);
from https://stackoverflow.com/questions/2667065/sort-files-by-date-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
치명적 오류 : 비 객체의 fetch_assoc () 멤버 함수 호출 (0) | 2018.09.08 |
---|---|
PHP associative arrays를 이용한 데카르트 제품 찾기 (0) | 2018.09.08 |
PHP에서 배열의 중복 값을 제거하는 방법 (0) | 2018.09.08 |
PHP에서 빈 값으로부터 기본 객체를 생성 하시겠습니까? (0) | 2018.09.08 |
일련의 부모 - 자식 관계를 계층 트리로 변환 하시겠습니까? (0) | 2018.09.08 |