Задание по сортировке массива. Не вникну никак... Об"ясните.

Crys

Двинутый новичок
Globus51
В функцию поступают 2 переменные ($a и $b)
Если возвращается -1, значит $a должно быть перед $b
Если возвращается 1, значит $a должно быть после $b
Если возвращается 0, то значит $a и $b одинаковы в плане сортировки.

"3" и "2" меняются местами и массив принимает вид:
Нет. В твоем примере будет сравнение цифр третьего и второго элемента. И элементы в массиве у тебя пересортируются после того, как пройдут все проверки.
 

Globus51

Новичок
Надоело, а что делать?
Не бросать же так и не разобравшись.
Жаль что никто не может об"яснить подробно и понятно так чтобы вопросов больше не возникло. Или ссылку дать где можно такое толковое об"яснение найти.

В знаменитом http://php.net/ru/usort сразу же после примера прямо и сказано что он бестолковый так как там функция sort () достаточна. Да и "Результат выполнения данного примера" не совсем соответствует коду, так как в коде нет оператора перевода строки, что также не добавляет доверия...
 

Фанат

oncle terrible
Команда форума
с функцией usort ты разобрался до конца.
дальше уже идет работа функции sort, т.е. алгоритм, по которому пхп сортирует массивы. смысла копаться в ней лично я не вижу.
если тебе хочется - можешь посмотреть в исходниках.
 

Crys

Двинутый новичок
В знаменитом http://php.net/ru/usort сразу же после примера прямо и сказано что он бестолковый так как там функция sort () достаточна. Да и "Результат выполнения данного примера" не совсем соответствует коду, так как в коде нет оператора перевода строки, что также не добавляет доверия...
Ты рано взялся за usort. Это для тебя пока что слишком сложно. Для начала попробуй понять разницу между

echo "a\n";
и
echo "a
";

Затем научись смотреть более одного примера. Ну и так далее, включая http://phpfaq.ru/na_tanke и http://phpfaq.ru/debug
А потом желание дурить другим голову пройдет и ты сам ответишь на свои вопросы.
 

Globus51

Новичок
Вот так пробую - оставил в функции только одно условие сортировки и добавил ещё один элемент массива - "skot".

<?
$a = array ("second","third","first", "skot");
usort ($a,"tes");
function tes ($c, $d) {
if ($c == "third" && $d == "second") return -1;
}
print_r ($a);
?>

Вот скажите как должно отсортироваться?
 

Globus51

Новичок
Но если взять только 3 элемента:
$a = array ("second","third","first");
то сортирует логично и правильно. Почему с 3 элементами всё хорошо, а с 4 уже нет?

-~{}~ 05.11.08 00:45:

<?
$a = array ("second","third","first");
usort ($a,"tes");
function tes ($c, $d) {
if ($c == "third" && $d == "second") return -1;
}
print_r ($a);
?>

Результат: Array ( [0] => first [1] => third [2] => second )

<?
$a = array ("second","third","first","skot");
usort ($a,"tes");
function tes ($c, $d) {
if ($c == "third" && $d == "second") return -1;
}
print_r ($a);
?>

Результат: Array ( [0] => skot [1] => first [2] => third [3] => second )
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Но если взять только 3 элемента:
$a = array ("second","third","first");
то сортирует логично и правильно
Неправильный или неполный критерий сортировки может отсортировать массив нужном порядке в некоторых случаях. Даже не тикающие часы показывают время правильно дважды в сутки. Правильный и полный критерий сортирует любой массив в требуемом порядке.
 

Crys

Двинутый новичок
Globus51
Перестань всем насиловать мозг и просто выводи через тот же print внутри функции сортировки данные, которые проверяются. При разных размерах массива - разная последовательность сверки элементов массива. Некоторые элементы могут вообще не проверяться. То, что ты делаешь сейчас - это не сортировка.. это фалосня собачья.. Поэтому у тебя она и работает не так как нужно.
 
Сверху