2

さて、これはかなり複雑です... $data という配列があるとしましょう

Array
(
    [9e5b0d6d-711c-4cd0-8697-634a5c640066] => Array
        (
            [player] => 9e5b0d6d-711c-4cd0-8697-634a5c640066
            [wins] => 1
            [loss] => 6
            [winsR] => 2
            [lossR] => 12
        )

    [a8f7fb4c-afab-4ec0-9202-b87fa2641110] => Array
        (
            [player] => a8f7fb4c-afab-4ec0-9202-b87fa2641110
            [wins] => 1
            [loss] => 6
            [winsR] => 2
            [lossR] => 12
        )

    [96ed2f95-08bd-42f8-bb57-9df09b66109d] => Array
        (
            [player] => 96ed2f95-08bd-42f8-bb57-9df09b66109d
            [wins] => 2
            [loss] => 5
            [winsR] => 4
            [lossR] => 10
        )

    [2a4e1a3e-cde4-4c9b-947e-67a4d333f0f4] => Array
        (
            [player] => 2a4e1a3e-cde4-4c9b-947e-67a4d333f0f4
            [wins] => 3
            [loss] => 4
            [winsR] => 6
            [lossR] => 8
        )

    [08c23d63-69a9-4147-b40f-64b241cfbb4f] => Array
        (
            [player] => 08c23d63-69a9-4147-b40f-64b241cfbb4f
            [wins] => 4
            [loss] => 3
            [winsR] => 8
            [lossR] => 6
        )

    [777e8f3e-caac-41fb-975e-a410e42f7114] => Array
        (
            [player] => 777e8f3e-caac-41fb-975e-a410e42f7114
            [wins] => 5
            [loss] => 2
            [winsR] => 11
            [lossR] => 4
        )

    [9cd5256f-6d3a-4bd5-aeed-b6904bcbf048] => Array
        (
            [player] => 9cd5256f-6d3a-4bd5-aeed-b6904bcbf048
            [wins] => 6
            [loss] => 1
            [winsR] => 12
            [lossR] => 3
        )

    [797c95df-c334-4328-a8eb-4ba5e690af4d] => Array
        (
            [player] => 797c95df-c334-4328-a8eb-4ba5e690af4d
            [wins] => 6
            [loss] => 1
            [winsR] => 12
            [lossR] => 2
        )
)

ご覧のとおり、一連のデータがあり、各要素には独自のネストされた配列があります。を使用して、単一のネストされた値を使用して配列をソートできることは既に知っています

usort($data, create_function('$a, $b', 'return $b["wins"] - $a["wins"];')); 

しかし、これでは十分ではありません。

問題は、上記の関数を使用した並べ替えでは、十分に深く並べ替えられないことです。以下に基づいてソートするだけです。

  • ['wins'] DESCENDING (最高の勝利が最初にソートされます)

ネストされた 4 つの値を使用して並べ替えたいと思います。

  • ['wins'] DESCENDING (最高の勝利が最初にソートされます)
  • ['loss'] ASCENDING (最小の損失が 2 番目にソートされます)
  • ['winsR'] DESCENDING (最高の winsR が 3 番目にソートされます)
  • ['lossR'] ASCENDING (最も低い lossR が 4 番目にソートされます)

私はこれがかなり複雑であることを知っているので、助けを求めるためにここに来ています。これを行うための最良かつ最も効率的な方法は何でしょうか?

4

1 に答える 1

4

あなたが探しているのは関数usort()です。

そこでは、2 つの要素を比較し、使用したいルールを適用できる独自のコンパレータを指定できます。

あなたは正しい軌道に乗っていましたが、コンパレータ関数はもっと複雑になる可能性があります:

function compare_elements($l, $r) {
    if ($l['wins'] > $r['wins']) {
        return -1;
    } else if ($l['wins'] < $r['wins']) {
        return 1;
    }

    // Drop to second level; it will have exited by here
    // if the tie could be broken by the first rule.
    // You really could've put this in an else clause, but I
    // wanted to avoid excessive nesting.
    if ($l['loss'] > $r['loss']) {
        return 1;
    } else if ($l['loss'] < $r['loss']) {
        return -1;
    }

    // And so on until the 4th level    
}
于 2012-06-01T05:20:52.533 に答える