Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie tablicy wielowymiarowej
kszychu
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Szukałem w różnych miejscach ale albo nie potrafię szukać, albo nie ma tej informacji (podejrzewam jednak to pierwsze). Otóż mam taką tablicę:
Cytat
[2] => Array
        (
            [klient] => 76
            [sprawa] => 185
            [pracownik] => 1
            [czas] => 3
            [stawka] => 1142.8571428571
            [zysk] => 3428.5714285714
            [koszt] => 7894973.6842105
        )

    [3] => Array
        (
            [klient] => 93
            [sprawa] => 188
            [pracownik] => 1
            [czas] => 5.00
            [stawka] => 300
            [zysk] => 1500
            [koszt] => 13158789.473684
        )

    [4] => Array
        (
            [klient] => 76
            [sprawa] => 179
            [pracownik] => 26
            [czas] => 3
            [zysk] => 450
            [koszt] => 15000840
        )

To oczywiście jej fragment. Teraz chcę posortować tę tablicę względem pól pracownik, klient, sprawa jednocześnie. Sortowanie według jednego pola to nie problem, chodzi mi o taką funkcję, której można podać kilka elementów, po których ma sortować.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
FiDO
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Moze troszke sie zapedzilem.. w sumie lepiej obudowac to w klase, bo na samych funkcjach to trzeba by uzywac globali, ale da sie. Nie widzialem tamtego kodu, bo cos mi nie dziala strona logowania na phpclasses, ale podejrzewam ze klasa tamta robi troche wiecej, niz tylko to sortowanie przez co moze byc przerosnieta. I pewnie tez korzysta z usort'a.

Wersja skrocona takiego sortowania moglaby wygladac np. tak:

  1. <?php
  2.  
  3. class ArrayMultiSort
  4. {
  5. var $fields;
  6.  
  7. function _callback($a, $b, $i = 0)
  8. {
  9. if ($a[$this->fields[$i]] == $b[$this->fields[$i]]) {
  10. if (isset($this->fields[$i + 1])) {
  11. return $this->_callback($a, $b, $i + 1);
  12. }
  13. return 0;
  14. }
  15. return ($a[$this->fields[$i]] > $b[$this->fields[$i]])? 1 : -1;
  16. }
  17.  
  18. function sort(&$arr)
  19. {
  20. usort($arr, array(&$this, '_callback'));
  21. }
  22. }
  23.  
  24. var_dump($aTest);
  25.  
  26. $sort = new ArrayMultiSort;
  27. $sort->fields = array('pracownik', 'klient', 'sprawa');
  28. $sort->sort($aTest);
  29.  
  30. var_dump($aTest);
  31.  
  32. ?>

Oczywiscie brakuje ustalania kolejnosci itp., ale to jest wersja minimalistyczna, zeby nie zasmiecac kodu niepotrzebnymi bajerami, a byla tylko widoczna zasada dzialania.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 06:19