2011-08-19 50 views
11

Làm thế nào tôi có thể sắp xếp một mảng các đối tượng như thế này:Sắp xếp mảng các đối tượng của trường ngày

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

kết thúc bằng phím date, lâu đời nhất đầu tiên?

Trả lời

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

Hoặc nếu bạn không có PHP 5.3:

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

Có vẻ tốt và tôi khuyên bạn nên làm OP để phân loại ngày/giờ trong cơ sở dữ liệu và/hoặc trả lại dấu thời gian đơn giản cùng với giá trị được định dạng, vì strtotime() có Chi phí đáng tin cậy và sẽ phân loại lặp đi lặp lại rất e xpensive. –

+0

hmm .. nhưng nó không giữ các phím số cũ .. – Nadine

+2

thay thế 'usort' bằng' uasort' rồi – arnaud576875

2

tôi muốn mở rộng về câu trả lời arnaud576875 's. Tôi chạy trên cùng một vấn đề này, nhưng với việc sử dụng các đối tượng DateTime. Đây là cách tôi đã có thể thực hiện điều tương tự.

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

Kể từ khi câu hỏi ban đầu là về sắp xếp mảng của stdClass() đối tượng, đây là đoạn code mà sẽ làm việc nếu $ a và $ b là các đối tượng:

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

Hoặc nếu bạn không có PHP 5.3:

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

đây phải là câu trả lời đúng. – devXen

Các vấn đề liên quan