我有一个像这样的数组和数组排序函数,可以根据日期和时间的键值对数组进行排序。如果所有数组元素中的日期时间值来自同一个月,则该函数可以正常工作。就像我有这个数组。
(
[0] => Array
(
[datetime] => 03/02/2017 07:54
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 03/02/2017
[location] => Coslada (Madrid)-Espanha
[time] => 07:54
)
[1] => Array
(
[datetime] => 03/02/2017 07:52
[status] => O volume chegou à Plataforma da .
[status_id] =>
[date] => 03/02/2017
[location] => Coslada (Madrid)-Espanha
[time] => 07:52
)
[2] => Array
(
[datetime] => 02/02/2017 16:27
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 02/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 16:27
)
[3] => Array
(
[datetime] => 02/02/2017 16:26
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 02/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 16:26
)
[4] => Array
(
[datetime] => 01/02/2017 20:15
[status] => Os dados do volume foram introduzidos no sistema .
[status_id] =>
[date] => 01/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 20:15
)
[5] => Array
(
[datetime] => 01/02/2017 00:00
[status] => Os dados do volume foram introduzidos no sistema \3B o volume ainda não foi entregue à .
[status_id] =>
[date] => 01/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 00:00
)
[6] => Array
(
[datetime] => 02/02/2017 19:27
[status] => Encomenda transferida: Chegará a Italy em breve
[status_id] => 6
[date] => 02/02/2017
[location] => Portugal
[time] => 19:27
)
[7] => Array
(
[datetime] => 01/02/2017 16:25
[status] => Encomenda recebida pela Delnext. Em preparação para ser enviada.
[status_id] => 2
[date] => 01/02/2017
[location] => Portugal
[time] => 16:25
)
[8] => Array
(
[datetime] => 29/01/2017 13:17
[status] => Encomenda em processo de recolha
[status_id] => 13
[date] => 29/01/2017
[location] => Spain
[time] => 13:17
)
[9] => Array
(
[datetime] => 29/01/2017 13:16
[status] => Pendente
[status_id] => 1
[date] => 29/01/2017
[location] => Spain
[time] => 13:16
)
)
这是我的函数,它根据日期时间值对数组进行排序。
usort($second_tracking_array, 'date_compare');
function date_compare($a, $b) {
define('AMERICAN_DATE_FORMAT', 'm/d/Y G:i');
$a['datetime'] = trim($a['datetime']);
$b['datetime'] = trim($b['datetime']);
$date1 = DateTime::createFromFormat(AMERICAN_DATE_FORMAT, $a['datetime'])->getTimestamp();
$date2 = DateTime::createFromFormat(AMERICAN_DATE_FORMAT, $b['datetime'])->getTimestamp();
return $date2 - $date1;
}
如果所有月份相同但该数组包含来自不同月份的日期时间,则该函数会对数组进行完美排序。它并不好。 下面是函数执行后的结果数组。
(
[0] => Array
(
[datetime] => 29/01/2017 13:17
[status] => Encomenda em processo de recolha
[status_id] => 13
[date] => 29/01/2017
[location] => Spain
[time] => 13:17
)
[1] => Array
(
[datetime] => 29/01/2017 13:16
[status] => Pendente
[status_id] => 1
[date] => 29/01/2017
[location] => Spain
[time] => 13:16
)
[2] => Array
(
[datetime] => 03/02/2017 07:54
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 03/02/2017
[location] => Coslada (Madrid)-Espanha
[time] => 07:54
)
[3] => Array
(
[datetime] => 03/02/2017 07:52
[status] => O volume chegou à Plataforma da .
[status_id] =>
[date] => 03/02/2017
[location] => Coslada (Madrid)-Espanha
[time] => 07:52
)
[4] => Array
(
[datetime] => 02/02/2017 19:27
[status] => Encomenda transferida: Chegará a Italy em breve
[status_id] => 6
[date] => 02/02/2017
[location] => Portugal
[time] => 19:27
)
[5] => Array
(
[datetime] => 02/02/2017 16:27
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 02/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 16:27
)
[6] => Array
(
[datetime] => 02/02/2017 16:26
[status] => Volume saiu da plataforma da
[status_id] =>
[date] => 02/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 16:26
)
[7] => Array
(
[datetime] => 01/02/2017 20:15
[status] => Os dados do volume foram introduzidos no sistema .
[status_id] =>
[date] => 01/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 20:15
)
[8] => Array
(
[datetime] => 01/02/2017 16:25
[status] => Encomenda recebida pela Delnext. Em preparação para ser enviada.
[status_id] => 2
[date] => 01/02/2017
[location] => Portugal
[time] => 16:25
)
[9] => Array
(
[datetime] => 01/02/2017 00:00
[status] => Os dados do volume foram introduzidos no sistema \3B o volume ainda não foi entregue à .
[status_id] =>
[date] => 01/02/2017
[location] => Venda do Pinheiro-Portugal
[time] => 00:00
)
)
答案 0 :(得分:0)
将usort()函数与自定义comarator一起使用:
$arr = array(...);
usort($arr, function($a, $b) {
$val1 = new DateTime($a['dateTime']);
$val2= new DateTime($b['dateTime']);
if ($val1 == $val2) {
return 0;
}
return $val1 < $val2 ? -1 : 1;
});