Сформировать список из 20 элементов и отсортировать этот массив чтобы числа выводились по модулю (0,-1,2,-3,-4,5,...)
Спустя 1 час, 39 минут, 9 секунд (9.02.2011 - 01:14) kovaldm написал(а):
Написать пользовательскую функцию.
Спустя 21 час, 30 минут, 5 секунд (9.02.2011 - 22:44) ambt написал(а):
мне это задание надо сделать через функцию usort и без функции strcmp!
оно у меня что-то вообще ни как не клеится :(
оно у меня что-то вообще ни как не клеится :(
<?php
function my_usort($a,$b) {return ($a,$b);} //как тут обойтись без strcmp понятия не имею, а ошибку выдает :(
$m=array(-18,-16,-14,-12,-10,-8,-6,-4,-3,-1,0,2,5,7,9,11,13,15,17,19); //и с последовательностью выполнения тоже теряюсь что куда и когда...
usort ($m,"my_usort");
????
}
?>
Спустя 7 минут, 40 секунд (9.02.2011 - 22:52) sergeiss написал(а):
Цитата (ambt @ 9.02.2011 - 23:44) |
{return ($a,$b);} / |
Это чего такое????? Что ты хотел сказать этим выражением?
Пользовательская функция (твоя которая) должна возвращать результат сравнения модулей чисел (насколько я понял)... При чем тут strcmp? Конечно, она не нужна

Спустя 13 секунд (9.02.2011 - 22:52) Snus написал(а):
ambt
Держи, студент :)
На выходе:
Держи, студент :)
<?php
function cmp($a, $b){
if ($a == $b) return 0;
if($a < 0) $a = $a * -1;
if($b < 0) $b = $b * -1;
return ($a < $b) ? -1 : 1;
}
$m = array(-18,-16,-14,-12,-10,-8,-6,-4,-3,-1,0,2,5,7,9,11,13,15,17,19);
usort ($m, 'cmp');
echo '<pre>';
print_r($m);
echo '</pre>';
?>
На выходе:
Array
(
[0] => 0
[1] => -1
[2] => 2
[3] => -3
[4] => -4
[5] => 5
[6] => -6
[7] => 7
[8] => -8
[9] => 9
[10] => -10
[11] => 11
[12] => -12
[13] => 13
[14] => -14
[15] => 15
[16] => -16
[17] => 17
[18] => -18
[19] => 19
)
Спустя 3 минуты, 45 секунд (9.02.2011 - 22:56) sergeiss написал(а):
Snus - а ты слышал про такую функцию, как abs()?

Спустя 2 минуты, 14 секунд (9.02.2011 - 22:58) Snus написал(а):
sergeiss
Слышал, конечно, но как-то не сообразил сразу :)
Слышал, конечно, но как-то не сообразил сразу :)
function cmp($a, $b){
if ($a == $b) return 0;
return (abs($a) < abs($b)) ? -1 : 1;
}
Спустя 4 минуты, 55 секунд (9.02.2011 - 23:03) sergeiss написал(а):
Snus - можно смело выкинуть первую строку из функции... В ней все равно смысла нету. И поставить в условии не "меньше", а "меньше или равно". Этого будет более, чем достаточно. Согласен?
Спустя 4 минуты (9.02.2011 - 23:07) Snus написал(а):
sergeiss
Хотел придраться, да не к чему
да, ты прав.
Хотел придраться, да не к чему


Спустя 8 минут, 28 секунд (9.02.2011 - 23:15) sergeiss написал(а):
Цитата (Snus @ 10.02.2011 - 00:07) |
Хотел придраться, да не к чему |
В 4 раза сократил количество строк. Причем сам, надо заметить. А мог и с самого начала написать так

Хотя было бы лучше, чтобы ТС сам до этого дошел, с помощью "наводящих подсказок".
Спустя 9 минут, 31 секунда (9.02.2011 - 23:25) ambt написал(а):
sergeiss, Snus - огромнейшее вам спасибо!!!
Я бы это задание конечно бы еще долго мучал!!!
Я бы это задание конечно бы еще долго мучал!!!
<?php
function my_usort($a,$b){
if($a<0) $a=$a*-1;
if($b<0) $b=$b*-1;
return ($a>=$b);
}
$m=array(-18,-16,-14,-12,-10,-8,-6,-4,-3,-1,0,2,5,7,9,11,13,15,17,19);
usort ($m, 'my_usort');
//Каким способом можно еще вывести массив на экран с помощью echo?
foreach($m as $value) {
echo $value.'<br />';
}
?>
Спустя 1 минута, 39 секунд (9.02.2011 - 23:26) sergeiss написал(а):
Цитата (ambt @ 10.02.2011 - 00:25) |
function my_usort($a,$b){ if($a<0) $a=$a*-1; if($b<0) $b=$b*-1; return ($a>=$b); } |
Это что??? Тут есть куда более компактный вариант этой функции, в одну строку... Или ты его не видишь?

Спустя 2 минуты, 26 секунд (9.02.2011 - 23:29) Snus написал(а):
ambt
Да не за что, конечно, но ты невнимательно читал, что мы писали ))
Да не за что, конечно, но ты невнимательно читал, что мы писали ))
<?php
function my_usort($a, $b){
return (abs($a) <= abs($b)) ? -1 : 1;
};
$m = array(-18,-16,-14,-12,-10,-8,-6,-4,-3,-1,0,2,5,7,9,11,13,15,17,19);
usort ($m, 'my_usort');
foreach($m as &$value) {
echo $value.'<br />';
}
?>
Спустя 9 минут, 52 секунды (9.02.2011 - 23:39) ambt написал(а):
Цитата |
Это что??? Тут есть куда более компактный вариант этой функции, в одну строку... Или ты его не видишь? |
Цитата |
Да не за что, конечно, но ты невнимательно читал, что мы писали )) |
функцию abs() я взял себе на заметку, но тут мне надо обойтись без неё...
return ($a < $b) ? -1 : 1;; //Я не могу понять зачем писать так если можно написать...
return ($a>=$b); //Вот так...
Спустя 5 минут, 15 секунд (9.02.2011 - 23:44) Snus написал(а):
ambt
Воистину! И правда так тоже работает :))
Но это уже больше похоже на быдло-код :)
Воистину! И правда так тоже работает :))
function cmp($a, $b){
return (abs($a) >= abs($b));
}
Но это уже больше похоже на быдло-код :)
Спустя 13 минут, 23 секунды (9.02.2011 - 23:57) ambt написал(а):
Snus
спасибо, учту!)))
И всё таки какие есть еще способы вывода массива на экран с помощью echo() ?
спасибо, учту!)))
И всё таки какие есть еще способы вывода массива на экран с помощью echo() ?
Спустя 12 минут, 24 секунды (10.02.2011 - 00:10) Snus написал(а):
ambt
echo implode('<br>', $m);
Спустя 16 минут, 36 секунд (10.02.2011 - 00:26) ambt написал(а):
Snus
Супер, спасибо! Классный метод!
Супер, спасибо! Классный метод!
