Некоторое время назад, глядя на потоки сортировки массивов, я придумал следующее:
public function sortList(&$objects, $on, $order = 'ASC') { $comparer = ($order === 'DESC') ? "return -strcmp(\$a->{$on},\$b->{$on});" : "return strcmp(\$a->{$on},\$b->{$on});"; usort($objects, create_function('$a,$b', $comparer)); return $objects; }
Вышеприведенный код работает нормально, единственная проблема заключается в том, что он чувствителен к регистру, тогда как я бы хотел, чтобы он был нечувствительным к регистру. Было бы возможно без переписывания всего этого?
Используйте strcasecmp вместо strcmp.
Ответ на использование strcasecmp()
уже дан, но ваша функция может быть сделана намного более чистым, используя правильные закрытия:
public function sortList(array &$objects, $on, $order = 'ASC') { $multiplier = $order == 'ASC' ? 1 : -1; usort($objects, function($a, $b) use ($on, $multiplier) { return $multiplier * strcasecmp($a->{$on}, $b->{$on}); }); return $objects; }