Сортировка по дате

masmel

Новичок
Сортировка по дате

Здравствуйте, уважаемые знатоки, возник такой вопрос. Есть код:
$list=file ('news.dat');
foreach($list as $string){

list($date,$param1,$p2,$p3,$p4,$p5,$p6,$p7,$p8) = explode('|',$string);

// ВЫВОДИМ данные

}
Такая проблема данные в файле могут быть записаны по дате так переменная ($date):
11.09.08.......
3.10.08.........
5.11.08.........
4.11.08.........
26.12.07.......

Необходимо взять только 3 самые последнии новости, т.е. получится 5.11.08, 3.10.08, 4.11.08 и отсортировать таким образом: 5.11.08, 4.11.08, 3.10.08. Подскажите как это реализовать?
 

gizmaz

Новичок
если новости хранятся в mysql, то сортировать надо в запросе вывода из базы..
 

obsrv

Новичок
Например:
$a = array('11.09.08', '3.10.08', '4.11.08');
usort($a, 'msort');
function msort($x, $y) {
list( $d, $m, $year) = explode(".", $x);
$ad = mktime( 0, 0, 0, $m, $d, $year);
list( $d, $m, $year) = explode(".", $y);
$bd = mktime( 0, 0, 0, $m, $d, $year);
return ($ad < $bd) ? 1: -1;
}

-1 и 1 менять по вкусу.
 

Армян

Новичок
obsrv
не будет работать =)

теперь будет, но нафига это ? в мане есть пример.
 

obsrv

Новичок
Армян
я поправил ;) "теперь будет".
Я думаю есть варианты и короче и элегантнее.
 

no_alex

Новичок
obsrv
Как вариант, вместо mktime можно добавлять ведуще нули к каждому элементу даты (например, через str_pad) и конкатенировать в строку формата "YYYYMMDD", а потом уже полученные строки сравнивать.

Что быстрее mktime или такая конкатенация - не знаю. Пробовать надо. ;)
 

Фанат

oncle terrible
Команда форума
я думаю, разница в скорости не принципиальна, но перевод времени в юникс явно лишняя операция.

лучше всего догадаться сразу хранить дату в нормальном формате.
 
Сверху