php – usort или array_multisort?

Попытка сортировать массив ниже 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 ) ) 

Просто usort :

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

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

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

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

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

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