2011-08-19 5 views
11

어떻게 다시 정렬 할 수 있습니다이 같은 객체의 배열 다음 date 키에 의해정렬 배열

[495] => stdClass Object 
     (
     [date] => 2009-10-31 18:24:09 
     ... 
     ) 
[582] => stdClass Object 
     (
     [date] => 2010-2-11 12:01:42 
     ... 
     ) 
... 

, 오래된 먼저?

답변

24
usort($array, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 

또는 당신은 PHP 5.3이없는 경우 :

function cb($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
} 
usort($array, 'cb'); 
+3

좋아 보인다, 나는 데이터베이스에 분류 날짜/시간을 수행 할 OP 추천 및/또는 한 strtotime으로, 포맷 된 값과 함께 일반 유닉스 타임 스탬프를 반환 할 것()가 생각할 수있는 오버 헤드와 반복되는 정렬을 매우 전자 매우 비싸다. –

+0

흠 ..하지만 이전의 숫자 키는 유지하지 않습니다. – Nadine

+2

'usort'를'uasort'로 바꾼 다음 – arnaud576875

2

내가 arnaud576875의 답변을 확장하고 싶었다. 나는이 동일한 문제를 겪었지만 DateTime 개체를 사용했다. 이것이 내가 같은 것을 성취 할 수 있었던 방법이다.

usort($array, function($a, $b) { 
    return $a['date']->format('U') - $b['date']->format('U'); 
}); 
11

원래의 질문이 stdClass의 배열을() 객체 정렬에 대한 때문에, 여기에 $ a와 $ b가 객체 경우 일 것입니다 코드입니다 :

usort($array, function($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
}); 

또는 당신이없는 경우 PHP 5.3 :

function cb($a, $b) { 
    return strtotime($a->date) - strtotime($b->date); 
} 
usort($array, 'cb'); 
+2

이것은 올바른 대답이어야합니다. – devXen