php usort сортировка по алфавиту

401
07 июня 2017, 05:01

Есть такой код

    usort($clinic, function($a, $b) {
        if ($a['DISTANCE'] == $b['DISTANCE']) {
            return 0;
        }
        return ($a['DISTANCE'] < $b['DISTANCE']) ? -1 : 1;
    });

он сортирует массив по возрастанию.

Вопрос как сделать сортировку по алфавиту имен, на основе такоже кода ? Что-то вроде этого, но он работает не верно.

        usort($clinic, function($a, $b){                  
        return ($a['NAME'] < $b['NAME']);
        });

Не могу понять логику usort, может объяснит кто или пример скажет.

Answer 1

usort работает аналогично sort за одной разницей, что функцию сравнения задаёт пользователь. У вас уже есть рабочий код (первый пример). Почему в него вместо "DISTANCE" не подставить "NAME"?

Callback функции сортировок должны возвращать 3 значения:

  • 0 - первое значение равно второму
  • 1 - первое значение больше второго
  • -1 - первое значение меньше второго

В вашем втором примере возвращается boolean значение, который к integer приводится как:

  • true - 1
  • false - 0

Другими словами, ваша функция вернёт:

  • 1 - первое значение меньше второго
  • 0 - первое значение больше или равно второму

Поэтому, у вас и неправильная сортировка.

Изменив ваш же код, получаем:

usort($clinic, function($a, $b) {
    if ($a['NAME'] == $b['NAME']) {
        return 0;
    }
    return ($a['NAME'] < $b['NAME']) ? -1 : 1;
});

Если я не совсем правильно понял суть, поясните, пожалуйста.

Answer 2

Можете сделать так: Стандартными функциями php:

$strings = array('/root/mandy/c.pdf', '/root/mandy/a.pdf', '/root/mandy/b.pdf');
sort($strings);
print_r($strings);

У меня так работает нормально.

READ ALSO
Автоматически добавляются объекты PHP

Автоматически добавляются объекты PHP

Есть несколько классов, которые взаимодействуют между собой

282
Как сохранить координаты в mysql Leaflet drow [требует правки]

Как сохранить координаты в mysql Leaflet drow [требует правки]

Как сохранить координаты в mysql Leaflet drow

323
Урок по изучению PHP

Урок по изучению PHP

Вопрос 1: При написании кода в:

248
Установка rar через pecl

Установка rar через pecl

Не получается установить rar для php через pecl в Centos 7 x 64 PHP 70

396