2012-10-25 31 views
-2

可能重複:
Sorting an array based on its value如何通過其中的特定值對數組進行排序?

我想排序它裏面的值的數組。我試過usort,但它導致了一些意想不到的結果,實際上改變了輸出的值,而不是僅僅移動數組中的元素。

下面是我要排序的數組:

Array 
(
[element1] => Array 
    (
     [Total] => 1 
     [paTotal] => 0 
     [totalPreregistrations] => 7 
     [totalPreregistrationsToDate] => 26 
     [pas] => Array 
      (
       [0] => Array 
        (
         [id] => 119 
        ) 

      ) 

    ) 

[element2] => Array 
    (
     [Total] => 1 
     [paTotal] => 0 
     [totalPreregistrations] => 0 
     [totalPreregistrationsToDate] => 58 
     [pas] => Array 
      (
       [0] => Array 
        (
         [id] => 107 
        ) 

      ) 

    ) 
... element3, 4, etc... 

我想通過「totalPreregistrations」號,以便在element2上面去,如果部件1 element2的的totalPreregistrations數排序進入上述部件1的。

當然,我也希望保留子數組。

謝謝!

+3

請張貼代碼爲你嘗試的解決方案。 –

+0

'嘗試使用,但它會導致一些意想不到的結果。什麼樣的結果..你可以添加你的'usort'的實現..你也可以添加你的數組的序列化版本 – Baba

+0

我想我明白你的意思..... – Baba

回答

2

Documentation: uasort()

function mySort($a, $b) { 
    if($a['totalPreregistrations'] == $b['totalPreregistrations']) { 
    return 0; 
    } else if($a['totalPreregistrations'] > $b['totalPreregistrations']) { 
    return 1; 
    } else { 
    return -1; 
    } 
} 

uasort($array, 'mySort'); 
+0

Wouldn這不會破壞原始鍵名「element1」,「element2」等。 –

+0

也許吧。將它從'usort()'改爲'uasort()'。 – Sammitch

+0

這工作!我必須將-1更改爲1,將1更改爲-1,以便反轉。我使用usort而不是uasort,這是主要問題。謝謝! –

1

您可以使用uasort代替usort

uasort($array, function ($a, $b) { 
    $a = $a['totalPreregistrations']; 
    $b = $b['totalPreregistrations']; 
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1); 
}); 


echo "<pre>"; 
print_r($array); 

輸出

Array 
(
    [element2] => Array <-------------------------- element key remains intact 
     (
      [Total] => 1 
      [paTotal] => 0 
      [totalPreregistrations] => 0 
      [totalPreregistrationsToDate] => 58 
      [pas] => Array 
       (
        [0] => Array 
         (
          [id] => 107 
         ) 

       ) 

     ) 

    [element1] => Array 
     (
      [Total] => 1 
      [paTotal] => 0 
      [totalPreregistrations] => 7 
      [totalPreregistrationsToDate] => 26 
      [pas] => Array 
       (
        [0] => Array 
         (
          [id] => 119 
         ) 

       ) 

     ) 

) 
+1

+1這和Sammitch的解決方案是一樣的,但是雙重三元是優雅的。 –

相關問題