我有两种类型的数组字段,我想按照它们排序:
第一个是 registration_date ,第二个是 preregistration_date
这是print_r数组输出(存储在变量 $ unsorted_users 中):
Array
(
[0] => stdClass Object
(
[id] => 120
[registration_date] => 2012-10-19 16:57:46
[username] => Jeff
)
[1] => stdClass Object
(
[id] => 121
[preregistration_date] => 2012-12-23 16:57:46
)
[2] => stdClass Object
(
[id] => 122
[registration_date] => 2012-11-30 16:57:46
[username] => Susan
)
)
我想通过 registration_date 和 preregistration_date 订购此阵列 DESC ,所以它看起来像这样:
阵 ( [0] => stdClass对象 ( [id] => 121 [preregistration_date] => 2012-12-23 16:57:46
)
[1] => stdClass Object
(
[id] => 122
[registration_date] => 2012-11-30 16:57:46
[username] => Susan
)
[2] => stdClass Object
(
[id] => 120
[registration_date] => 2012-10-19 16:57:46
[username] => Jeff
)
)
我的usort功能是:
$sorted_users = usort($unsorted_users, function($a, $b) {
return strcmp ($a->registration_date, $b->registration_date) ;
});
但是,它只是按 registration_date 排序,如果没有registration_date,例如:
[1] => stdClass Object
(
[id] => 121
[preregistration_date] => 2012-12-23 16:57:46
)
我收到错误。
如何调整我的功能,使其为registration_date或preregistation_date排序?
顺便说一下。 registration_date和preregistration_date的格式始终相同,并且两者都不能在一个对象中。所以,这不需要验证。
提前致谢。
答案 0 :(得分:2)
喜欢这个吗?
$sorted_users = usort($unsorted_users, function($a, $b) {
$registrationDateA = empty($a->registration_date) ?
$a->preregistration_date : $a->registration_date;
$registrationDateB = empty($b->registration_date) ?
$b->preregistration_date : $b->registration_date;
return strcmp ($registrationDateA, registrationDateB) ;
});