0

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

第一个是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_datepreregistration_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

        )

)

我的排序功能是:

$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 的格式始终相同,并且两者不能在一个对象中。所以,这不需要验证。

提前致谢。

4

1 回答 1

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) ;
});
于 2012-11-23T18:14:55.363 回答