Php 调整usort函数以在两个字段之一上排序
我想根据两种类型的数组字段进行排序: 第一个是注册日期,第二个是预注册日期 这是打印数组输出(存储在变量$unsorted\u users中): 我想按注册日期和预注册日期对数组进行排序,如下所示: 排列 ( [0]=>stdClass对象 ( [id]=>121 [预注册日期]=>2012-12-23 16:57:46Php 调整usort函数以在两个字段之一上排序,php,Php,我想根据两种类型的数组字段进行排序: 第一个是注册日期,第二个是预注册日期 这是打印数组输出(存储在变量$unsorted\u users中): 我想按注册日期和预注册日期对数组进行排序,如下所示: 排列 ( [0]=>stdClass对象 ( [id]=>121 [预注册日期]=>2012-12-23 16:57:46 ) [1] => stdClass Object ( [id] => 122
)
[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) ;
});
但是,它只是按照注册日期进行排序,如果没有注册日期,例如:
[1] => stdClass Object
(
[id] => 121
[preregistration_date] => 2012-12-23 16:57:46
)
我犯了一个错误
如何调整我的函数,使其成为注册日期或预注册日期排序
顺便说一句,注册日期和预注册日期的格式始终相同,并且不能在一个对象中。因此,这不需要验证
提前谢谢。像这样吗
$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) ;
});
在尝试访问某个属性之前,可以使用
property\u exists()
检查该属性是否存在。这似乎是正确的方法。我会尝试一下,让您知道它是如何工作的。
$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) ;
});