0

次のように並べ替えたい 2 種類の配列のフィールドがあります。

1つ目は登録日、2 つ目は事前登録日です。

これが 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
        )

)

この配列DESCregistration_datepreregistration_dateで注文したいので、次のようになります。

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

ただし、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 の形式は常に同じであり、両方を 1 つのオブジェクトにすることはできません。したがって、これは検証する必要はありません。

前もって感謝します。

4

1 に答える 1