2011-04-07 3 views
0

폴더에서 파일 이름을 가져 와서 날짜순으로 정렬 한 다음 파일에 대한 링크를 만드는 기능이 있습니다. 그러나 실제 파일 이름에 단어 사이에 공백이있는 경우에만 작동합니다. 파일 이름에 하이픈을 추가하면 날짜 순서가 올바르게 작동하지 않습니다. 작업이preg_match 코드를 수정하여 파일 이름을 날짜순으로 정렬 하시겠습니까?

파일 이름 :

프리젠 테이션 월 2011.pdf

프리젠 테이션 당당한 2010.pdf

프리젠 테이션 내가에 하이픈을 추가하는 경우

을 2010.pdf 수 주문이 파기되는 파일 이름 :

프리젠 테이션 월-2011.pdf 있도록

가 발표 8 월-2010.pdf이

프리젠 테이션 월-2010.pdf 내가는 preg_match을 (변경할 수있는 방법

)이 걸리는 계정 하이픈에? 여기 내 코드는 다음과 같습니다.

$linkdir="documents/presentations"; 
$dir=opendir("documents/presentations"); 
$files=array(); 

while (($file=readdir($dir)) !== false) 
{ 
    if ($file != "." and $file != ".." and $file != "index.php") 
    { 
    array_push($files, $file); 
    } 
} 

closedir($dir); 

function date_sort_desc($a, $b) 
{ 
    preg_match('/\w+ \d{4}/', $a, $matches_a); 
    preg_match('/\w+ \d{4}/', $b, $matches_b); 
    $timestamp_a = strtotime($matches_a[0]); 
    $timestamp_b = strtotime($matches_b[0]); 
    if ($timestamp_a == $timestamp_b) return 0; 
    return $timestamp_a < $timestamp_b; 
} 

usort($files, 'date_sort_desc'); 

foreach ($files as $file){ 
    $name = substr($file, 0, strrpos($file, '.')); 
    $filename = str_replace(" ", "%20", $file); 
    $name = str_replace("-", " ", $file); 
    print "<li><a href='/$linkdir/$filename' rel='external'>$name</a></li>"; 
} 

이 점에 대해 도움을 주시면 감사하겠습니다.

답변

1

'/ \ w + \ d {4} /'는 단어, 공백 및 4 자리를 찾습니다. '/ \ w + [-] \ d {4} /'는 단어와 숫자 사이에 공백이나 하이픈을 찾아야합니다.

+0

슈퍼 스타 - 정말 고마워요! – Jonathan

2

다음 두 줄은 :

preg_match('/\w+ \d{4}/', $a, $matches_a); 
preg_match('/\w+ \d{4}/', $b, $matches_b); 

그들은 '단어와 같은 문자'(\의 w), 공간의 수와 다음 네 자리 숫자 (\ d)를 일치합니다.

공백 또는 대시를 허용하도록 정규 표현식을 변경하거나 ''대신 '[ -]'또는 '(|-)'을 사용할 수 있습니다. 이렇게하면 strtotime() 함수 호출이 중단되어서는 안됩니다. 만약 그렇다면

, 당신은 상단에 다음 추가하여 date_sort_desc()을 변경할 수 있습니다 :

$a = str_replace("-", " ", $a); 
$b = str_replace("-", " ", $b); 

을이 경우에는 정규 표현식을 변경할 필요가 없습니다 것입니다.

+0

RikkusRukkus가 strtotime()에서 발생할 수있는 문제를 해결했기 때문에 +1. 그러나 매치 콜이나 패턴을 변경해야하기 전에 치료법을 적용해야합니다. –

0

그러면 다른 문자를 사용하면 코드가 계속 업데이트됩니다./\ w + \ W? \ d {4} /와 같은 것을 사용하여 영숫자가 아닌 문자를 캡처 해보십시오.

+0

Markdown help - http://stackoverflow.com/editing-help#syntax-highlighting –

관련 문제