Загвоздка с сортировкой PHP

Vachtang

Новичок
Загвоздка с сортировкой PHP

Есть список каталогов и файлов $FilesNDirs , нужно вывести сначало каталоги потом файлы
Есть такой код:

PHP:
function cmp($el_1,$el_2) 
{ 
    //Snacalo katalog a potom fail 
    if (is_dir($el_1)&&!is_dir($el_2)) return -1; 
    if (!is_dir($el_1)&&is_dir($el_2)) return 1; 
     
    //Sravnivaem po alfavitu 
    if($el_1<$el_2) return -1; 
       elseif ($el_1>$el_2) return 1; 
           else return 0; 
} 
uasort($FilesNDirs,"cmp");
я начинающий в php никак не могу разобраться, объясните пожалуйста подробно каждую строчку, большое спасибо
 

alexhemp

Новичок
Vachtang

Берешь мануал по PHP и читаешь

http://ru.php.net/uasort

Функция сортирует массив используя callback ф-цию. (что это такое - в учебниках по программированию рассказывается).

function cmp(...) - это пользовательская ф-ция. Организует свое правило сравнения двух элементов массива.

Аналогичным образом, используя мануал - ты разберешь что значит каждая строка.
 

Vachtang

Новичок
Загвоздка с пониманием, что такое функция я знаю, мне не понятны строки всередине тоесть не врубаю как сортирует,
что так трудно объяснить?
 

Vachtang

Новичок
это к тому, что я попросил о помощи и не уж-то так трудно пояснить, читаю мануал, но читать это одно, а практика другое
 

Фанат

oncle terrible
Команда форума
нет, нетрудно.
просто, прежде, чем пояснять, надо сначала узнать - а что именно человеку непонятно.
а то он пишет в заголовке одно, а в сообщении - другое.
Неужели так трудно внятно вопрос задать?
 

Vachtang

Новичок
ясно, попробую задать внятно:

сортирует правильно, просто не понятно как он это делает?
а именно вот тут:

PHP:
if (is_dir($el_1)&&!is_dir($el_2)) return -1; 
    if (!is_dir($el_1)&&is_dir($el_2)) return 1; 
      
    //Sravnivaem po alfavitu 
    if($el_1<$el_2) return -1; 
       elseif ($el_1>$el_2) return 1; 
           else return 0;
если существует директория $el_1 и не существует $el_2 возвращает -1

это первая строка, я так расуждаю?
 

SelenIT

IT-лунатик :)
Близко, но не точно:
если $el_1 - директория, а $el_2 - не директория (т.е. файл), выходит из функции и возвращает -1.
 

alexhemp

Новичок
сортирует ф-ция uasort, а твоя ф-ция cmp только сравнивает между собой элементы массива.

Почитай про алгоритмы сортировки в памяти - они используют 2 базовые операции - сравнение элементов и обмен элементов местами.

Вот почитай как работают алгоритмы сортировки
http://algoritms.ru/
 

Vachtang

Новичок
спасибо, я немного не так расуждал
как понимаю главную работа достаётся функции
PHP:
uasort
, a та функция это правило как сортировать
Если не прав поправте
 

Фанат

oncle terrible
Команда форума
прав 100%.

-~{}~ 05.10.05 00:45:

то есть, функция uasort, на самом деле, очень мощная.
ведь с помощью cmp она может сортировать всё, что угодно.

Кстати, приведённый в приере код неоптимален.
получать информацию о том, чем является ли элемент каталога - файлом или каталогом - лучше сразу при прочтении.
и писать эту информацию в массив.
и при проверке сравнивать её.
 
Сверху