对 PHP 中的 DateTime 对象数组进行 Usort - 没有错误,数组未排序
Usort on Array of DateTime Objects in PHP - No Error, Array Not Sorting
我有一个很长的多维数组,其中包含一些 DateTime 对象。我想根据 [startdate] 对象对整个数组进行排序。我正在使用这个 usort 函数(基于大量在线资源和各种错误的修改)。它不是对数组进行排序。
我的数组格式如下。为简洁起见,仅显示开头。
Array
(
[] => Array
(
[startdate] => DateTime Object
(
[date] => 2019-04-10 19:00:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
[starttime] => DateTime Object
(
[date] => 2019-04-10 19:00:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
这是我的排序代码:
function date_compare($a, $b) {
$t1 = $a["startdate"]->format('Y-m-d H:i:s');
$t2 = $b["startdate"]->format('Y-m-d H:i:s');
return $t1 - $t2;
}
usort($allEventsSimple, 'date_compare');
我还尝试使用以下代码对 DateTime 对象进行排序:
function date_compare($a, $b) {
$t1 = var_dump($a[startdate]);
$t2 = var_dump($b[startdate]);
return $t1 - $t2;
}
usort($allEventsSimple, 'date_compare');
你确实有错误,只是你看不到它们(参见 How to get useful error messages in PHP?)
您的代码将生成
PHP Notice: A non well formed numeric value encountered in ...
这是因为您正试图从一个非数字字符串中减去另一个。
如果您使用的是 PHP 7,您可以直接将 DateTime
实例与命名为 "spaceship operator" 的实例进行比较,例如
return $a['startdate'] <=> $b['startdate'];
如果您卡在 PHP 5,请比较时间戳
return $a['startdate']->getTimestamp() - $b['startdate']->getTimestamp();
我有一个很长的多维数组,其中包含一些 DateTime 对象。我想根据 [startdate] 对象对整个数组进行排序。我正在使用这个 usort 函数(基于大量在线资源和各种错误的修改)。它不是对数组进行排序。
我的数组格式如下。为简洁起见,仅显示开头。
Array
(
[] => Array
(
[startdate] => DateTime Object
(
[date] => 2019-04-10 19:00:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
[starttime] => DateTime Object
(
[date] => 2019-04-10 19:00:00.000000
[timezone_type] => 3
[timezone] => America/New_York
)
这是我的排序代码:
function date_compare($a, $b) {
$t1 = $a["startdate"]->format('Y-m-d H:i:s');
$t2 = $b["startdate"]->format('Y-m-d H:i:s');
return $t1 - $t2;
}
usort($allEventsSimple, 'date_compare');
我还尝试使用以下代码对 DateTime 对象进行排序:
function date_compare($a, $b) {
$t1 = var_dump($a[startdate]);
$t2 = var_dump($b[startdate]);
return $t1 - $t2;
}
usort($allEventsSimple, 'date_compare');
你确实有错误,只是你看不到它们(参见 How to get useful error messages in PHP?)
您的代码将生成
PHP Notice: A non well formed numeric value encountered in ...
这是因为您正试图从一个非数字字符串中减去另一个。
如果您使用的是 PHP 7,您可以直接将 DateTime
实例与命名为 "spaceship operator" 的实例进行比较,例如
return $a['startdate'] <=> $b['startdate'];
如果您卡在 PHP 5,请比较时间戳
return $a['startdate']->getTimestamp() - $b['startdate']->getTimestamp();