За последние 24 часа нас посетили 18358 программистов и 1637 роботов. Сейчас ищут 1680 программистов ...

сортировка многомерного массива

Тема в разделе "Прочие вопросы по PHP", создана пользователем aswind, 12 окт 2009.

  1. aswind

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

    С нами с:
    5 окт 2009
    Сообщения:
    27
    Симпатии:
    0
    Всем привет! Уже почти час сижу бьюсь с массивами...
    Пример.
    Есть что-то типа ленты событий. Данные собираются с разных источников по формату:
    lent[ID][time]=время события (timestamp)
    lent[ID][link]=ссылка на детали
    lent[ID][user]=юзер

    Надо отсортировать массив lent так, чтобы самое последние событие стало первым в списке (desc,против алфавита). Но как это сделать чтобы отсортировать не только lent[ID][time], а и link и user?
     
  2. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    А зачем link и user сортировать? Тем более их так просто и не отсортируешь.
     
  3. aswind

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

    С нами с:
    5 окт 2009
    Сообщения:
    27
    Симпатии:
    0
    разобрался сам.

    может кому надо...

    PHP:
    1. class sort {
    2. private $array;
    3. private $sortKey;
    4. private $f;
    5. private $l;
    6.  
    7.  
    8.  
    9. public function sort($array, $sortKey, $isAsc = true) {
    10. $this->array = $array;
    11. $this->sortKey = $sortKey;
    12. if ($isAsc) {
    13. $this->f = +1;
    14. $this->l = -1;
    15. } else {
    16. $this->f = -1;
    17. $this->l = +1;
    18. }
    19. return $this->get();
    20. }
    21.  
    22. public function get() {
    23. usort($this->array, array($this, 'cmp'));
    24. return $this->array;
    25. }
    26.  
    27. private function cmp($str1, $str2) {
    28. if ($str1[$this->sortKey] == $str2[$this->sortKey])
    29. return 0;
    30.  
    31. return $str1[$this->sortKey] > $str2[$this->sortKey] ? $this->f : $this->l;
    32. }
    33. }
    34.  
    35.  
     
  4. aswind

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

    С нами с:
    5 окт 2009
    Сообщения:
    27
    Симпатии:
    0
    Hight
    link затем что у каждого типа события разные ссылки. напр на /albums/?album_id=323 и /post/?owner=123&id=4343. это так, пример. user - айди юзера, выполнившего событие (добавившего коммент и т п)
     
  5. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Я думаю, что надо переписать нормально.

    lent[ID][time]=время события (timestamp)
    lent[ID][link]=ссылка на детали
    lent[ID][user]=юзер

    это переделать на это:

    lent[time][id]=время события (timestamp)
    lent[time][id][link]=ссылка на детали
    lent[time][id][user]=юзер

    потом krsort(lent) - сортируем в обратном порядке по времени, а потом обходим массив и не паримся.

    // p.s. Ещё не проснулся, могу стормозить.