Всем привет! Не хотелось бы велосипед придумывать, решил поинтересоваться как лучше(быстрее) реализовать?... есть массив: HTML: Array ( [0] => Array ( [year] => 2010 [month] => 11 [day] => 1 [time] => 18:40 ) [1] => Array ( [year] => 2009 [month] => 10 [day] => 12 [time] => 16:40 ) [2] => Array ( [year] => 2010 [month] => 11 [day] => 10 [time] => 13:40 ) ) И собственно нужно привести его к виду: HTML: Array ( [0] => Array ( [year] => 2010 [month] => 11 [day] => 10 [time] => 13:40 ) [1] => Array ( [year] => 2010 [month] => 11 [day] => 1 [time] => 18:40 ) [2] => Array ( [year] => 2009 [month] => 10 [day] => 12 [time] => 16:40 ) )
http://ru.php.net/manual/en/function.usort.php В пользовательской функции я бы из значений массива генерил бы таймстамп чем-то вроде mktime или strtotime, а его уже банально сравнивал как в примерах usort. Ух, кстати, как встроенной перловой <=> не хватает в таких случаях...
Работает Однако! Спасибо MiksIr! PHP: $mass[0]['year'] = '2010'; $mass[0]['month'] = '12'; $mass[0]['day'] = '1'; $mass[0]['time'] = '15:40'; $mass[1]['year'] = '2009'; $mass[1]['month'] = '11'; $mass[1]['day'] = '12'; $mass[1]['time'] = '16:40'; $mass[2]['year'] = '2010'; $mass[2]['month'] = '10'; $mass[2]['day'] = '10'; $mass[2]['time'] = '18:40'; $mass[3]['year'] = '2010'; $mass[3]['month'] = '12'; $mass[3]['day'] = '2'; $mass[3]['time'] = '10:40'; $mass[4]['year'] = '2009'; $mass[4]['month'] = '11'; $mass[4]['day'] = '11'; $mass[4]['time'] = '16:41'; echo '<pre>'; print_r($mass); echo '</pre>'; echo '---<br/>'; function test_m($i, $t) { if ($t == $i) {return 0;} return ($t < $i) ? -1 : 1; } usort($mass, 'test_m'); echo '<pre>'; print_r($mass); echo '</pre>';
Если сравниваешь тупо массивы, следи, что бы время было с нулем, т.е. 01:20, а не 1:20, так как во втором случае сравнение будет ошибочным.
Да, можно, правда у меня ничего не вышло с первого раза... я не стал пока над этим голову ломать и усложнять зарос, хотя надо бы. Тогда к примеру табличка: [sql] -- -- Структура таблицы `test` -- CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL auto_increment, `user_id` int(10) unsigned NOT NULL, `date_create` timestamp NOT NULL default CURRENT_TIMESTAMP, `date_start` date NOT NULL, `time` time default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ; -- -- Дамп данных таблицы `test` -- INSERT INTO `test` VALUES(1, 1, '2010-05-27 09:21:45', '2010-05-27', '12:30:00'); INSERT INTO `test` VALUES(2, 1, '2010-05-27 09:21:45', '2010-05-28', '12:00:00'); INSERT INTO `test` VALUES(3, 2, '2010-05-27 09:21:45', '2010-05-27', '12:00:00'); INSERT INTO `test` VALUES(4, 2, '2010-05-27 09:21:45', '2010-05-27', '12:40:00'); INSERT INTO `test` VALUES(5, 1, '2010-05-27 09:21:45', '2010-05-29', '11:00:00'); INSERT INTO `test` VALUES(6, 1, '2010-05-27 09:24:25', '2010-05-27', '13:00:00'); INSERT INTO `test` VALUES(7, 1, '2010-05-27 09:24:25', '2010-05-28', '14:00:00');[/sql] Пока я остановился только на:[sql]SELECT `id`, `date_start`, `time` FROM `test` WHERE `user_id` = '1' ORDER BY `date_start` DESC LIMIT 10[/sql] Как мне сделать ORDER BY, так чтобы ещё и время цеплялось, я не придумал пока... может ты подскажешь пример подобных запросов?
о! Вот так работает! [sql]SELECT `id`, `date_start`, `time` FROM `test` WHERE `user_id` = '1' ORDER BY `date_start` DESC, `time` DESC[/sql] Надо переместить к блондинкам =))