2010-06-10 77 views
5

嘗試按照memnum升序排列下面的數組,我有點困惑哪個更好用... usort或array_multisort?我在想,因爲它是多維的?有沒有人有這樣的例子?php - usort或array_multisort?

Array 
(
    [0] => Array 
     (
      [memnum] => 3236467423 
      [mid] => 1104881300 
      [fname] => JOHN   
      [lname] => DOE     
      [add1] => OMITTED 
      [add2] =>    
      [city] => CHESTERFIELD  
      [state] => MI 
      [zip] => 48051 
      [age] => 50 
     ) 
    [1] => Array 
     (
      [memnum] => 3258467922 
      [mid] => 1105121457 
      [fname] => JANE   
      [lname] => DOE     
      [add1] => OMITTED 
      [add2] =>    
      [city] => CHESTERFIELD  
      [state] => MI 
      [zip] => 48051 
      [age] => 50 
     ) 
    [2] => Array 
     (
      [memnum] => 3237769108 
      [mid] => 1104489312 
      [fname] => BOB   
      [lname] => DOE     
      [add1] => OMITTED 
      [add2] =>    
      [city] => CHESTERFIELD  
      [state] => MI 
      [zip] => 48051 
      [age] => 50 
     ) 
) 

回答

9

只要usort

usort($arr, function (array $a, array $b) { return $a["memnum"] - $b["memnum"]; }); 

array_multisort用於比較在同一時間從不同的陣列(或子陣列)元件。你想比較只有一個數組的元素,所以你使用usort。這些元素本身就是數組這一事實是無關緊要的。

13

由於這是array_multisort vs usort上最重要的谷歌搜索結果,即使它已經4歲了,我也會回覆。

usort()是更簡潔且不需要提取列陣列喂到在array_multisort()。 (它也確實小於在array_multisort。)

然而,當我今天反覆測試它在20000和10000表示數據行的陣列,usort()爲7-15x比較慢在array_multisort()當柱是int類型的隨機值,列是預提取的。這正如人們所期望的那樣,因爲對於每個比較而言,您都將整個php函數調用與優化的內部代碼進行比較。

使用前一個答覆中的匿名函數可以提高30-35%的提高,而不是通過usort()定義函數的名稱。它永遠不會比8倍慢,通常比10倍慢。通常這並不重要,但是當你開始花費十分之一秒的CPU時間來排序一個數組時,它可能會這樣。在5.5版之前的服務器上提取沒有array_column()的列從未完全將差分減半。

+0

我在比較'usort()'和'array_multisort()'的多維數組上運行了一些性能測試。 [結果](https://www.codepunker.com/blog/3-solutions-for-multidimensional-array-sorting-by-child-keys-or-values-in-PHP#performance-test)贊成後者在php 7.0上。 – 2018-02-02 14:11:32