Php 调整usort函数以在两个字段之一上排序

Php 调整usort函数以在两个字段之一上排序,php,Php,我想根据两种类型的数组字段进行排序: 第一个是注册日期,第二个是预注册日期 这是打印数组输出(存储在变量$unsorted\u users中): 我想按注册日期和预注册日期对数组进行排序,如下所示: 排列 ( [0]=>stdClass对象 ( [id]=>121 [预注册日期]=>2012-12-23 16:57:46 ) [1] => stdClass Object ( [id] => 122

我想根据两种类型的数组字段进行排序:

第一个是注册日期,第二个是预注册日期

这是打印数组输出(存储在变量$unsorted\u users中):

我想按注册日期和预注册日期对数组进行排序,如下所示:

排列 ( [0]=>stdClass对象 ( [id]=>121 [预注册日期]=>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) ;
});
但是,它只是按照注册日期进行排序,如果没有注册日期,例如:

 [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) ;
});