2013-12-07 5 views
0

기본적으로 날짜를 읽고 올바른 순서로 순서를 매기는 것이 문제입니다. 왜 그런지 모르겠지만 때로는 오늘 날짜가 표시됩니다. 누구든지 코드를 삭제할 수 있습니까? 나는 그것이 너무 지저분하다고 생각한다. 나는 PHP로 그다지 좋지 않다.내 뉴스 스크립트가 올바른 순서로 뉴스를 구성하지 않습니다.

기본적으로 뉴스 스크립트는 다음과 같이 작동합니다. 뉴스의 .txt 파일을 포함하는 includes/news 폴더에서 읽습니다. 각 뉴스 파일의 이름은 [09.12.2013] random news title, 이며 최신순부터 오래된 순으로 주문해야합니다 (최신순, 가장 오래된 순차적). 즉 역순으로 주문해야합니다.

감사합니다. 감사합니다.

<? 
$files = array(); 
if($handle = opendir('includes/news')) { 
    while($file = readdir($handle)) { 
     if ($file != '.' && $file != '..') { 
      // let's check for txt extension 
      $extension = substr($file, -3); 
      // filename without '.txt' 
      $filename = substr($file, 0, -4); 
      if ($extension == 'txt') 
       $files[] = $filename; // or $filename 
     } 
    } 
    closedir($handle); 
} 
rsort($files); 
foreach ($files as $file) 
{ 
    // get post date 
    $postdate = substr($file, 0, 10); 
    $postdate = str_replace(array('[', ']'), '', $postdate); 
    $todaysdate = date("d.m.y"); 
    if($postdate == $todaysdate) { $fromtoday = "true"; } 
    $postdate = date('F jS, Y', strtotime($postdate)); 
    $filetitle = substr($file, 10); 
    if($fromtoday == "true") { echo "<b style=\"color: #ffb400;\">&#8987; NEW:</b>"; } 
    echo '<a href="?module=news&read=' . $file . '"><span style="float:right;">' . $postdate . '</span>' . $filetitle . "</a>"; 
} 

?> 
+3

[09.12.2013] 주문에 매우 어리석은 이유는 무엇입니까 [2013.09.12]? – MightyPork

+0

abit 혼란, 솔직히 말해서. 하지만 내가 할 수 있다고 생각해. 질문은 내 코드가 충분히 깨끗한가요? – user2617739

+0

또한 때때로 혼합됩니다. 주문에 대한 솔루션이 맞습니까? – user2617739

답변

0

당신의 최선의 선택은 아마도 당신은 문자열에서 날짜를 구문 분석 비교 ($value_compare_func)하는 기능을해야 할 것이다 usort()

bool usort (array &$array , callable $value_compare_func) 

를 사용하고 비교하는 것입니다. 예제 문서를 보는 것이 가장 좋습니다.

이처럼 사용하십시오 :

usort($files, function($a, $b) { 
     // here is the comparison logic 
     // return -1,0 or 1 
}); 

이 방법을 사용하면 날짜별로 정렬 할 수 있습니다 문자열 (또는 아무것도 다른)에서 정규식 구문 분석합니다.

역순으로하려면 정렬 기능에서 -1과 1을 바꾸면됩니다.

관련 문제