Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie wielowymiarowych tablic
Forum PHP.pl > Forum > PHP
ganimedes
Mam sobie taką tablice...
  1. <?php
  2. (
  3.     [1] => Array
  4.         (
  5.             [0] => 1
  6.             [1] => 1
  7.             [2] => 1
  8.             [3] => 0
  9.         )
  10.  
  11.     [2] => Array
  12.         (
  13.             [0] => 4
  14.             [1] => 1
  15.             [2] => 0
  16.             [3] => 0
  17.         )
  18.  
  19.     [4] => Array
  20.         (
  21.             [0] => 1
  22.             [1] => 0
  23.             [2] => 0
  24.             [3] => 1
  25.         )
  26.  
  27.      [3] => Array
  28.         (
  29.             [0] => 1
  30.             [1] => 1
  31.             [2] => 0
  32.             [3] => 0
  33.         )
  34.  
  35. ?>


Jak posortować ją zeby wyglądała tak
  1. <?php
  2. (
  3.     [2] => Array
  4.         (
  5.             [0] => 4 // chodzi mi o tą wartość 
  6.             [1] => 1 // potem o tą 
  7.             [2] => 0 // next
  8.             [3] => 0 // itd
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [0] => 1
  14.             [1] => 1
  15.             [2] => 1
  16.             [3] => 0
  17.         )
  18.  
  19.     [3] => Array
  20.         (
  21.             [0] => 1
  22.             [1] => 1
  23.             [2] => 0
  24.             [3] => 0
  25.         )
  26.    
  27.     [4] => Array
  28.         (
  29.             [0] => 1
  30.             [1] => 0
  31.             [2] => 0
  32.             [3] => 1
  33.         )
  34.  
  35. ?>

Próbowałem funkcji
  1. <?php
, nie działa, nie zachowuje kluczy sad.gif
Problem dla speców.. kto rozwiąże ten jest bardzo dobry.

Regards
bela
1. czemu masz tak dziwnie klucze poukladane tongue.gif 1, 2, 4, 3 zamiast 0, 1, 2, 3 ?
ganimedes
ehhee te klucze można bez problemu posortować
  1. <?php
  2. ?>
ale nie o to chodzi...
mike
Rozwiązanie jest jak zwyke w manualu.
sort()

Tip: Poszukaj w komentarzach użytkowników, na dole pod opisem funkcji sort(). A dokładnie wypowiedzi użytkowników : Gerhard Conradi i admin at lavacube dot net.
ganimedes
Wow ale żeś mnie oświecił, nic tam nie widze, skomplkowane przykłady.. Masz jeszcze jakieś mądre pomysły??
mike
No przykro mi, bardziej cię nie oświecę.
Cytat
(...)skomplkowane przykłady (...)

A ty myślałeś że ta funkcja dwie linijki będzie miała?
Masz w manualu gotowca, jak nie potrafisz z niego skożystać to masz problem.
A poza tym jak ci któś napisze to tez powiesz że z trudne i ci nie pasuje.
Więcej pomóc ci nie potrafię , jak podając gotowca.
ganimedes
DeyV Twoja funkcja jest świetna, pierwszą wartość sotuje z pozostawieniem kluczy, powiem szczerze że nie bardzo rozumiem. ALe nie sortuje kolejnych wartości..
DeyV
mam nadzieję, ze mój kod będzie wystarczająco łatwy do zrozumienia.
ps. to nie było zadanie dla "tylko dla mocnych"...

  1. <?php
  2. $aData = Array
  3. (
  4. => Array
  5. (
  6. => 1,
  7. => 1,
  8. => 1,
  9. => 0,
  10. ),
  11.  
  12. => Array
  13. (
  14. => 4,
  15. => 1,
  16. => 0,
  17. => 0,
  18. ),
  19.  
  20. => Array
  21. (
  22. => 1,
  23. => 0,
  24. => 0,
  25. => 1,
  26. ),
  27.  
  28. => Array
  29. (
  30. => 1,
  31. => 1,
  32. => 0,
  33. => 0,
  34. )
  35. );
  36.  
  37. function SortCallback( $aParam1, $aParam2 ) 
  38. {
  39. foreach( $aParam1 as $iWiersz => $mVal )
  40. {
  41. if( !isset( $aParam2[ $iWiersz ] ) or $aParam2[ $iWiersz ] < $mVal )
  42. {
  43. return 1; // odpowiedni rekord w param1 jest większy 
  44. }
  45. elseif( $aParam2[ $iWiersz ] > $mVal ) 
  46. {
  47. return -1; // odpowiedni rekord w param1 jest mniejszy
  48. }
  49. }
  50. return 0; // wszystkie rekordy w parametrach są równe
  51. }
  52.  
  53.  
  54. function SortCallbackDesc( $aParam1, $aParam2 ) 
  55. {
  56. return SortCallback( $aParam1, $aParam2 ) * -1;
  57. }
  58.  
  59.  
  60. uasort( $aData , 'SortCallbackDesc' );
  61.  
  62. echo '<pre>';
  63. print_r( $aData );
  64. ?>


// edited. Tak jak napisał w poście powyżej ganimedes, mój poprzedni kod zawierał drobiny błąd.
ganimedes
Przepraszam to było zadanie dla wybitnie zdolnych smile.gif masz u mnie piwo jeśli jesteś z okolic Sokołowa lub Siedlec!!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.