2012-11-23 44 views
0

我有兩種類型的數組的領域,我想根據排序:調整usort功能進行排序2的一個領域

月1日是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 
     ) 

) 

我要訂購這個數組DESC通過REGISTRATION_DATEpreregistration_date所以它看起來像這樣:

陣列 ( [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排序?

Btw。 registration_date和preregistration_date的格式始終相同,並且兩者都不能位於一個對象中。所以,這不需要驗證。

在此先感謝。

+0

您可以使用'property_exists()'在試圖訪問它之前檢查一個屬性是否存在。 – Barmar

回答

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) ; 
}); 
+0

看起來是正確的做法。我會試着讓你知道它是如何運作的。 – Derfder

+0

太棒了,它工作得很好。 – Derfder