php - usort还是array_multisort?

时间:2010-06-10 11:37:41

标签: php multidimensional-array

尝试按升序对memnum下面的数组进行排序,我有点困惑哪个更好用... 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 
        )
)

3 个答案:

答案 0 :(得分:15)

由于这是关于array_multisort vs usort的最显着的Google结果,即使它已经4年了,我也会回复。

usort ()更简洁,并且不需要提取列数据以提供给 array_multisort ()。 (它也比array_multisort少。)

但是,当我今天在20,000和10,000个代表性数据行的阵列上反复测试时, usort ()比 array_multisort ()慢了7-15倍是int类型的随机值,并且该列是预先提取的。这是人们可能期望的,因为对于每次比较,您都要将整个php函数调用与优化的内部代码进行比较。

使用上一个回复中的匿名函数比传递 usort ()已定义函数的名称提高了30-35%。它从来没有比慢8倍更好,通常比慢10倍慢。通常这不重要,但是当你开始计算CPU时间的十分之一秒只是为了排序一个阵列时,它可能会。在5.5之前的服务器上提取没有 array_column ()的列,最好不要将差异减半。

答案 1 :(得分:10)

只需usort

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

array_multisort用于同时比较来自不同数组(或子数组)的元素。您想比较一个数组的元素,因此您使用usort。这些元素本身就是数组这一事实无关紧要。

答案 2 :(得分:0)

作记录(并与usort解决方案进行比较), array_multisort的使用方法如下:

array_multisort(array_column($arr, 'memnum'), $arr);