1

この配列の並べ替えに問題があります。

Array
(
    [0] => stdClass Object
        (
            [id] => 120
            [registration_date] => 2012-10-19 16:57:46
            [username] => Jeff
        )
    [1] => stdClass Object
        (
            [id] => 121
            [registration_date] => 2012-12-23 16:57:46
            [username] => Peter
        )
    [2] => stdClass Object
        (
            [id] => 122
            [registration_date] => 2012-11-30 16:57:46
            [username] => Susan
        )

)

変数に格納されます:

$unsorted_users

この配列DESCregistration_dateで並べ替えたいので、次のようになります。

Array
    (
        [0] => stdClass Object
            (
                [id] => 121
                [registration_date] => 2012-12-23 16:57:46
                [username] => Peter

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

    )

そしてそれは次のようにregistration_dateによって順序付けられます:

2012-12-23 16:57:46
2012-11-30 16:57:46
2012-10-19 16:57:46

オリジナルの代わりに:

2012-10-19 16:57:46
2012-12-23 16:57:46
2012-11-30 16:57:46

このコードを使用していますが、うまく機能していません(print_r($ sorted_users); $sorted_usersの出力は「1」です。1でソートされていない配列である理由はわかりません)。

$sorted_users = usort($unsorted_users, function($a, $b) {
   return $a['registration_date'] - $b['registration_date'];
});

$ sorted_usersのコードが間違っている理由についてアドバイスはありますか?

4

3 に答える 3

4

文字列を減算することはできません。2つの文字列を比較する場合は、次のようにstrcmp()関数を使用します。

<?php

//  setup
$unsorted_users = array();

$t = new stdClass(); 
$t->id = 120; $t->username = 'jeff'; $t->registration_date = '2012-10-19 16:57:46'; 
$unsorted_users[] = $t;

$t = new stdClass(); 
$t->id = 121; $t->username = 'Peter'; $t->registration_date = '2012-12-23 16:57:46'; 
$unsorted_users[] = $t;

$t = new stdClass(); 
$t->id = 122; $t->username = 'Susan'; $t->registration_date = '2012-11-30 16:57:46'; 
$unsorted_users[] = $t;
// end setup


$sorted_users =    // this var is nor relevant as it shoud be allways true
usort($unsorted_users, function($a, $b) {
   return strcmp ($a->registration_date, $b->registration_date) ;
});

echo '<pre>';
print_r($unsorted_users)   // that is in fact ordered!

?>

ここをいじる

于 2012-11-23T17:48:31.700 に答える
3

usortは参照によって配列に取り組んでおり、成功ブール値を返しています。つまり、あなた$sorted_usersはそのブール値を含んでいます。これで、元の配列がソートされます。

于 2012-11-23T17:47:17.127 に答える
3

すでにいくつかの有効な答えがありますが、それらに追加するには:

変数は配列ではなくオブジェクトに含まれています。並べ替えるオブジェクトの配列があるため、次を使用する必要があります。

$a->registration_date
// etc.

それ以外の:

$a['registration_date']
于 2012-11-23T17:50:18.063 に答える