2

多くのプロパティを持つ複数のオブジェクトを含む配列があります。

PHPベースで2つのオブジェクトプロパティに基づいて並べ替えたい

これは、私が扱っているデータのアイデアを提供するオブジェクトのサンプル配列です。

Array (
    [0] => stdClass Object (
        [username] => user98
        [sender_id] => 98
        [date_sent] => 2012-07-25 00:52:11
        [not_read] => 0
    )
    [1] => stdClass Object (
        [username] => user87
        [sender_id] => 87
        [date_sent] => 2012-07-25 00:59:15
        [not_read] => 1
    )
    [2] => stdClass Object (
        [username] => user93
        [sender_id] => 93
        [date_sent] => 2012-07-25 00:52:13
        [not_read] => 2
    )
    [3] => stdClass Object (
        [username] => user5
        [sender_id] => 5
        [date_sent] => 2012-07-25 00:52:16
        [not_read] => 0
    )
)

私はそれをソートしてこの配列にする必要があります:

Array (
    [1] => stdClass Object (
        [username] => user87
        [sender_id] => 87
        [date_sent] => 2012-07-25 00:59:15
        [not_read] => 1
    )
    [2] => stdClass Object (
        [username] => user93
        [sender_id] => 93
        [date_sent] => 2012-07-25 00:52:13
        [not_read] => 2
    )
    [3] => stdClass Object (
        [username] => user5
        [sender_id] => 5
        [date_sent] => 2012-07-25 00:52:16
        [not_read] => 0
    )

    [0] => stdClass Object (
        [username] => user98
        [sender_id] => 98
        [date_sent] => 2012-07-25 00:52:11
        [not_read] => 0
    )


)

並べ替えは、オブジェクトのdateプロパティとnot_readプロパティに基づいており、並べ替えではnot_read> 0が最初に優先され、次にdate_sentプロパティが調べられ、最新のdate_sentで並べ替えられます。これは、誰がより高いnot_readプロパティを持っているかに基づいていないことに注意してください。

次に、not_readプロパティが0の場合は、最新のdate_sentで並べ替えられます。

誰かがこのプログラムで私を助けることができますか?

たくさん見てくれてありがとう!

4

2 に答える 2

4

ユーザー定義のソート関数を使用する必要があります。

function sortByDate($a, $b)
{
    if($a->not_read > $b->not_read)
        return 1;
    if($a->not_read < $b->not_read)
        return -1;
    if(strtotime($a->date_sent) > strtotime($b->date_sent))
        return 1;
    if(strtotime($a->date_sent) < strtotime($b->date_sent))
        return -1;
    return 0;
}

次に、usortで呼び出します。

usort($array_to_sort, 'sortByDate');

渡された配列がソートされます。

于 2012-07-24T17:27:17.423 に答える
1
function sortByDate($a, $b)
{
    if($a->not_read > 0 && $b->not_read == 0)
        return -1;
    if($b->not_read > 0 && $a->not_read == 0)
        return 1;
    if ($a->not_read == 0 && $b->not_read == 0 || $a->not_read > 0 && $b->not_read > 0){
        if(strtotime($a->date_sent) > strtotime($b->date_sent))
            return -1;
        if(strtotime($a->date_sent) < strtotime($b->date_sent))
            return 1;
    }

    return 0;
}

usort($array_to_sort, 'sortByDate');

注:私はパトリックを編集したいと思いますが、私がうまくいったかどうかはわかりませんでした。彼は正しい方向に進んでいた。

于 2012-07-24T17:41:58.337 に答える