Сортировка массива со строками DateTime? - PullRequest
3 голосов
/ 01 февраля 2012

Как я могу эффективно отсортировать этот массив (в первую очередь недавние элементы) по значению end_time в PHP?

array
  0 => 
    array
      'value' => int 4
      'end_time' => string '2012-01-20T08:00:00+0000' (length=24)
  1 => 
    array
      'value' => int 0
      'end_time' => string '2012-01-21T08:00:00+0000' (length=24)
  2 => 
    array
      'value' => int 5
      'end_time' => string '2012-01-22T08:00:00+0000' (length=24)
  3 => 
    array
      'value' => int 4
      'end_time' => string '2012-01-23T08:00:00+0000' (length=24)
  4 => 
    array
      'value' => int 7
      'end_time' => string '2012-01-24T08:00:00+0000' (length=24)

Ответы [ 6 ]

19 голосов
/ 01 февраля 2012

Рассматривали ли вы функцию usort Документы ?Это позволяет вам определить функцию обратного вызова для сравнения двух значений.Поэтому я предлагаю что-то вроде этого:

function compare_func($a, $b)
{
    // CONVERT $a AND $b to DATE AND TIME using strtotime() function
    $t1 = strtotime($a["end_time"]);
    $t2 = strtotime($b["end_time"]);

    return ($t2 - $t1);
}

usort(main_array, "compare_func");
5 голосов
/ 01 февраля 2012
usort($data, function($a, $b) {
    return strtotime($a['end_time']) - strtotime($b['end_time']);
});
2 голосов
/ 01 февраля 2012
usort($array, function($a, $b){ 
    return (strtotime ($a ['end_time']) 
          - strtotime ($b ['end_time'])) 
          * -1; 
});
0 голосов
/ 01 февраля 2012

Эти данные поступают из базы данных?Если это так, то лучший подход - это просто выполнить сортировку базы данных.

0 голосов
/ 01 февраля 2012

Вы можете использовать функцию uasort следующим образом:

$arr=array();
$arr[] = array('valeu' => "4", 'end_time' => '2012-01-20T08:00:00+0000');
$arr[] = array('valeu' => "0", 'end_time' => '2012-01-21T08:00:00+0000');
$arr[] = array('valeu' => "5", 'end_time' => '2012-01-22T08:00:00+0000');
$arr[] = array('valeu' => "4", 'end_time' => '2012-01-23T08:00:00+0000');
$arr[] = array('valeu' => "7", 'end_time' => '2012-01-24T08:00:00+0000');
print_r($arr);
function cmp($a, $b) {
    $ta = strtotime($a['end_time']);
    $tb = strtotime($b['end_time']);
    return ($ta - $tb);
}
uasort($arr, 'cmp');
print_r($arr);
0 голосов
/ 01 февраля 2012

Попробуйте:


function sort_datewise($x, $y) {
    $t1 = strtotime($x['end_time']);
    $t2 = strtotime($y['end_time']);
    return $t1 - $t2;
}    
usort($array, 'sort_datewise');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...