php - usort или array_multisort? - PullRequest
       4

php - usort или array_multisort?

5 голосов
/ 10 июня 2010

Попытка отсортировать массив ниже по memnum в порядке возрастания, и я немного запутался, что лучше использовать ... usort или array_multisort?Я думал, usort, потому что это многомерно?У кого-нибудь есть пример этого?

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 
        )
)

Ответы [ 2 ]

15 голосов
/ 11 апреля 2014

Поскольку это самый выдающийся результат Google для array_multisort vs usort, я отвечу, хотя ему уже 4 года.

usort () более лаконичен и неt требуется извлечь массив столбцов для подачи в array_multisort ().(Это также делает меньше, чем array_multisort.)

Однако, когда я неоднократно проверял его сегодня на массивах из 20 000 и 10 000 представительных строк данных, usort () был в 7-15 раз медленнее, чем array_multisort (), когда столбец имел случайные значения типа int, и столбец был предварительно извлечен.Как и следовало ожидать, так как для каждого сравнения вы сравниваете весь вызов функции php с оптимизированным внутренним кодом.

Использование анонимной функции, как в предыдущем ответе, дало улучшение на 30-35% по сравнению с передачей usort () имени определенной функции.Это никогда не было лучше, чем в 8 раз медленнее, и обычно хуже, чем в 10 раз медленнее.Часто это не имеет значения, но когда вы начинаете загружать процессорную часть в десятые доли секунды только для сортировки одного массива, это может иметь значение.Извлечение столбца без array_column () на сервере, предшествующем 5.5, в лучшем случае никогда не делало разницы в два раза.

10 голосов
/ 10 июня 2010

Just usort:

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

array_multisort используется для одновременного сравнения элементов из разных массивов (или подмассивов),Вы хотите сравнить элементы только одного массива, поэтому вы используете usort.Тот факт, что эти элементы сами являются массивами, не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...