У меня есть массив, такой как:
Array
(
[0] => Array
(
[id] => 2
[type] => comment
[text] => hey
[datetime] => 2010-05-15 11:29:45
)
[1] => Array
(
[id] => 3
[type] => status
[text] => oi
[datetime] => 2010-05-26 15:59:53
)
[2] => Array
(
[id] => 4
[type] => status
[text] => yeww
[datetime] => 2010-05-26 16:04:24
)
)
Кто-либо может предложить способ сортировать/заказывать это на основе элемента даты и времени?
Используйте usort ()
и пользовательскую функцию сравнения:
function date_compare($a, $b)
{
$t1 = strtotime($a['datetime']);
$t2 = strtotime($b['datetime']);
return $t1 - $t2;
}
usort($array, 'date_compare');
РЕДАКТИРОВАТЬ : Ваши данные организованы в виде массива массивов. Чтобы лучше различать их, давайте назовем внутренние массивы (данные) записями, чтобы ваши данные действительно были массивом записей.
usort
передаст две из этих записей в заданную функцию сравнения date_compare ()
за раз. date_compare
затем извлекает поле «datetime»
из каждой записи как метку времени UNIX (целое число) и возвращает разницу, так что результат будет 0
если обе даты равны, положительное число, если первая ( $ a
) больше, или отрицательное значение, если второй аргумент ( $ b
) больше. usort ()
использует эту информацию для сортировки массива.
http://us2.php.net/manual/en/function.array-multisort.php см. третий пример:
<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
fyi, использование unix (секунды с 1970 года) или mysql timestamp (YmdHis - 20100526014500) было бы проще для парсера, но я думаю, что в вашем случае это не имеет значения.