2012-06-01 42 views
2

好吧,這是一個相當複雜的......可以說,我有一個數組名爲$數據通過MULTIPLE嵌套值在PHP中排序和數組?

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"];')); 

但是,這還不夠。

問題是,用上面的函數排序對我來說排序不夠深入。它是所有排序基於以下幾點:

  • [「勝」]降支(最高勝排序第一)

我想用四個嵌套值進行排序。

  • [ '勝']降序(最高勝排序第一)
  • [ '損失']升序(最低損耗排序第二)
  • [ 'WINSR']降序(最高WINSR排序第三)
  • ['lossR'] ASCENDING(最低損失R排序第四)

我知道這很複雜,所以我來這裏尋求幫助。什麼是最好和最有效的方式來做到這一點?

回答

4

你在找什麼是功能usort()

在那裏,您可以提供自己的比較器,可以比較兩個元素並應用您希望使用的規則。

你在正確的軌道上,但你的比較器功能可以更加精細的:'一類環境

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

嗯......非常酷......我將如何使用'usort()?我不能確切地做'usort($ data,$ this-> compare_elements)' –

+0

在類環境中,您可能會將其定義爲具有static關鍵字的類作用域函數,並將「MyClass :: compare_ranking_array」稱爲比較器或者你可以使用匿名函數(請參閱http://php.net/manual/en/functions.anonymous.php) – phsource

+0

謝謝...你大人! –