如何按日期字段降序对数组进行排序?
How to sort an array by date field descending order?
我有一个如下所示的数组。我想使用日期降序排列这个数组。但是我的代码不起作用。
$tbData = Array
(
[0] => Array
(
[0] => Baby Boo
[1] => 31921
[2] => 07 Oct, 2016 07:27 pm
)
[1] => Array
(
[0] => Moonshine
[1] => 32110
[2] => 07 Oct, 2016 09:12 pm
)
[2] => Array
(
[0] => Hulk
[1] => 31374
[2] => 13 Sep, 2016 03:00 pm
)
[3] => Array
(
[0] => Sweet SHAI
[1] => 667
[2] => 05 Oct, 2016 09:36 am
)
[4] => Array
(
[0] => Hulk
[1] => 31374
[2] => 13 Sep, 2016 03:01 pm
)
[5] => Array
(
[0] => Maple
[1] => 2270
[2] => 08 Oct, 2016 07:31 am
)
[6] => Array
(
[0] => Josie
[1] =>
[2] => 08 Oct, 2016 04:40 pm
)
)
我正在尝试使用 this Stack Overflow 问题来解决这个问题。但这对我不起作用。
我的代码如下:
$name = 2;
usort($tbData, function ($a, $b) use (&$name) {
return strtotime($a[$name]) - strtotime($b[$name]);
});
我提交的日期列有所不同。这就是为什么我的代码无法正常工作的原因。还有其他解决办法吗?
如评论中所述,这里的核心问题是 strtotime
不理解您的日期时间格式。您可以通过查看 return 值(如果转换失败则为 FALSE
)来计算出这一点。
因此,解决方案是使用另一个函数进行转换,例如 date_create_from_format and extract the epoch second value from that DateTime using date_timestamp_get 来比较它们,如下所示:
usort($tbData, function ($a, $b) {
$sa = date_create_from_format('d M, Y H:i a',$a[2]);
$sb = date_create_from_format('d M, Y H:i a',$b[2]);
return date_timestamp_get($sa) - date_timestamp_get($sb);
});
我有一个如下所示的数组。我想使用日期降序排列这个数组。但是我的代码不起作用。
$tbData = Array
(
[0] => Array
(
[0] => Baby Boo
[1] => 31921
[2] => 07 Oct, 2016 07:27 pm
)
[1] => Array
(
[0] => Moonshine
[1] => 32110
[2] => 07 Oct, 2016 09:12 pm
)
[2] => Array
(
[0] => Hulk
[1] => 31374
[2] => 13 Sep, 2016 03:00 pm
)
[3] => Array
(
[0] => Sweet SHAI
[1] => 667
[2] => 05 Oct, 2016 09:36 am
)
[4] => Array
(
[0] => Hulk
[1] => 31374
[2] => 13 Sep, 2016 03:01 pm
)
[5] => Array
(
[0] => Maple
[1] => 2270
[2] => 08 Oct, 2016 07:31 am
)
[6] => Array
(
[0] => Josie
[1] =>
[2] => 08 Oct, 2016 04:40 pm
)
)
我正在尝试使用 this Stack Overflow 问题来解决这个问题。但这对我不起作用。
我的代码如下:
$name = 2;
usort($tbData, function ($a, $b) use (&$name) {
return strtotime($a[$name]) - strtotime($b[$name]);
});
我提交的日期列有所不同。这就是为什么我的代码无法正常工作的原因。还有其他解决办法吗?
如评论中所述,这里的核心问题是 strtotime
不理解您的日期时间格式。您可以通过查看 return 值(如果转换失败则为 FALSE
)来计算出这一点。
因此,解决方案是使用另一个函数进行转换,例如 date_create_from_format and extract the epoch second value from that DateTime using date_timestamp_get 来比较它们,如下所示:
usort($tbData, function ($a, $b) {
$sa = date_create_from_format('d M, Y H:i a',$a[2]);
$sb = date_create_from_format('d M, Y H:i a',$b[2]);
return date_timestamp_get($sa) - date_timestamp_get($sb);
});