За последние 24 часа нас посетили 17595 программистов и 1610 роботов. Сейчас ищут 1156 программистов ...

Сортировка массива, sort()

Тема в разделе "PHP для новичков", создана пользователем add_rv, 21 ноя 2007.

  1. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    Доброго времени суток.
    Есть такая проблемка: сортирую многомерный массив - sort($array,SORT_STRING) и если массив уже отсортирован, то функция "sort" сортирует его в обратном порядке.
    В чем прикол? Хотя в мануале везде пишут, что "Простейшая функция sort() сортирует элементы массива по возрастанию (от меньших к большим)."
     
  2. Mavir

    Mavir Guest

    А чего сортируешь многомерные массивы, а правило сортировки задаешь как для строки?
     
  3. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    массив вида:
    Array
    (
    [0] => Array
    (
    [login] => aaa
    [ip] => 192.168.0.10
    [name] => Иванов Иван Иванович
    )
    [1] => Array
    (
    [login] => bbb
    [ip] => 192.168.0.68
    [name] => Петров Петр
    )
    [2] => Array
    (
    [login] => ccc
    [ip] => 192.168.0.11
    [name] => Пупкин Вася
    )
    )
    А как его еще сортировать по логину?
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  5. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    я это уже читал... видимо так и придеться сделать...
    одно не понятно - почему так работает sort()!!!
    всем спасибо!!!
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    У тебя элементы массива, в данном случае, другие массивы. И sort по всей видимости приводит его к строковому типу.
     
  7. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    я бы согласился, если бы sort() сортировала не понять как...
    она сортирует правильно по логину, только первый раз по возростанию, второй по убыванию... и так чередуется...
    вот это не понятно...
    :)
     
  8. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    короче, если что-то хочешь сделать, СДЕЛАЙ ЭТО САМ!!!
    и будет тебе счастье!!!
    :)
     
  9. Mavir

    Mavir Guest

    Я ж тебя сразу спросил
    В итоге у тебя все значения в массиве становятся равными строке "Array"

    Примерно так у тебя работает сортировка
    PHP:
    1.  
    2. <?
    3. function mysort(&$arr){
    4.     for ($i=0; $i<count($arr)-1; $i++){
    5.         $min = $i;
    6.         for ($j=$i+1; $j<count($arr); $j++){
    7.             if ( (string)$arr[$min] >= (string)$arr[$j]){
    8.                 $min =$j;
    9.             }
    10.         }
    11.         $x = $arr[$i];
    12.         $arr[$i] = $arr[$min];
    13.         $arr[$min] = $x;
    14.     }
    15. }
    16. ?>
    Вот еще пример для закрепления, что нужно правильно выбирать типы сортировки

    PHP:
    1. <?
    2. $a = $b = array(
    3.     '01',
    4.     '00001',
    5.     '001',
    6.     '000001',
    7. );
    8.  
    9. sort($a, SORT_STRING); print_r($a);
    10. sort($a, SORT_STRING); print_r($a);
    11. sort($a, SORT_STRING); print_r($a);
    12.  
    13. print '------------------------------------';
    14.  
    15. sort($b, SORT_NUMERIC); print_r($b);
    16. sort($b, SORT_NUMERIC); print_r($b);
    17. sort($b, SORT_NUMERIC); print_r($b);
    18. ?>
    19.  
     
  10. add_rv

    add_rv Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    6
    Симпатии:
    0
    буду использовать usort()
    всем спасибо!!!