Jump to content
  • 0

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


Globus51
 Share

Question

Задание по сортировке массива. Не вникну никак в суть того как вообще здесь сортировка происходит при работе функции.

Об"ясните...

.......................................

Дан массив $a = array("second","third","first"); Отсортировать значения элементов массива так, чтобы элемент third был первым, second – вторым, first – третьим.

<?

$a = array ("second","third","first");

usort ($a,"tes");

function tes ($c, $d) {

if ($c == "third" && $d == "second") return -1;

if ($c == "third" && $d == "first") return -1;

if ($c == "first" && $d == "second") return 1;

if ($c == "second" && $d == "third") return 1;

if ($c == "first" && $d == "third") return 1;

}

print_r ($a);

?>

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Ответ:

usort - сортирует массив по значениям, используя пользовательскую функцию сравнения.

Т.е. usort ($a,"tes"); сортирует массив $a, используя пользовательскую функцию сравнения tes.

Функция, используемая для сравнения, должна возвращать целое число, меньшее, равное или большее нуля, если первый аргумент соответственно меньше, равен или больше второго. (Массив сортируем от меньшнго к большему)

Функция tes переберет последовательно (подробнее смотри по ссылке) все элементы массива $a, получается, что:

third < second (т.к. при их сравнении функция возвращает "-1")

third < first (т.к. при их сравнении функция возвращает "-1")

first > second (т.к. при их сравнении функция возвращает "1")

second > third (т.к. при их сравнении функция возвращает "1")

first > third (т.к. при их сравнении функция возвращает "1")

Получается, что third < second < first

Печатаем то что получилось print_r ($a);

Всё.

P.S. с такими вопросами самим надо разбираться.

Link to comment
Share on other sites

  • 0

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

<?

$a = array ("second","third","first", "skot");

usort ($a,"tes");

function tes ($c, $d) {

if ($c == "third" && $d == "second") return -1;

}

print_r ($a);

?>

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

Link to comment
Share on other sites

  • 0

Ответ: Array ( [0] => skot [1] => first [2] => third [3] => second )

Твоя функция в последнем примере должна пониматься так: при сравнении элементов не отсортированного массива

1. Все элименты равны между собой (т.к. для них не заданно правило сравнения)

2. Кроме элемента second который меньше элемента third ( и следовательно меньше всех остальных, т.к. элемент third равен остальным элементам см. п. 1.)

P.S. Ты сам свой скрипт запускал, видел, что получилось?! Так зачем продалжать спрашивать?! Думай сам, это не сложно и много полезнее, чем я тебе объясню.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy