Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie tablicy ...
Forum PHP.pl > Forum > PHP
Nosfi
Witka,

Mam problem z sortowaniem tablicy.

Tablica wygląda następująco:
  1. <?php
  2.  
  3. $tablica = array(&#092;"1\",\"10\",\"11\", ... ,\"2\",\"20\",\"21\",\"22\", ... ,\"5\",\"50\",\"51\",\"52\", ...);
  4.  
  5. ?>

normalne wyświetlenie jej poprzez pętle przy użyciu funkcji SORT
  1. <?php
  2.  
  3. rsort($tablica);
  4. for($i = 1; $i <= sizeof($tablica); $i++) echo $tablica[$i - 1] . '';
  5.  
  6. ?>

daje wynik:
52 51 50 5 ... 22 21 20 2 ... 11 10 1

a ja chciałbym uzyskać wynik:
52 51 50 ... 22 21 20 ... 11 10 ... 5 ... 2 1

Skrypt służy sprawdzaniu zawartości danego katalogu i segregacji plików.
Zaznaczam od razu, iż numeracja plików w postacji 000x nie wchodzi w grę.

Pozdrowionka z wysp ...
.dragonfly
Moze tak?
  1. <?php
  2.  
  3. $tablica = array(&#092;"1\",\"10\",\"11\", ... ,\"2\",\"20\",\"21\",\"22\", ... ,\"5\",\"50\",\"51\",\"52\", ...);
  4. natsort( $tablica );
  5. print_r ( $tablica );
  6.  
  7. ?>
Nosfi
No niestety, ale nie.

Po zapętleniu
  1. <?php
  2.  
  3. $tablica = array(&#092;"1\",\"10\",\"11\",\"2\",\"20\",\"21\",\"22\",\"5\",\"50\",\"51\",\"52\");
  4.  
  5. natsort($tablica);
  6.  
  7. for($i = 1; $i <= sizeof($tablica); $i++) echo $tablica[$i - 1] . '<br>';
  8.  
  9. ?>

wynik ciągle nie jest taki jak powinien ...

natomiast:
  1. <?php
  2.  
  3. print_r ( $tablica );
  4.  
  5. ?>


daje nam w rezultacie ...

  1. Array ( [0] => 1 [3] => 2 [7] => 5 [1] => 10 [2] => 11 [4] => 20 [5] => 21 [6] => 22 [8] => 50 [9] => 51 [10] => 52 )
.dragonfly
To moze tak biggrin.gif

  1. <?php
  2.  
  3.  
  4. $tablica = array ( &#092;"1\", \"12\", \"1010\", \"150\", \"5\", \"50\", \"550\" );
  5.  
  6. natsort($tablica);
  7. $arr = array_reverse($tablica, true);
  8.  
  9.  
  10.  
  11. ?>
mike
Jak masz tak :
  1. <?php
  2.  
  3. $tablica = array(&#092;"1\",\"10\",\"11\", ... ,\"2\",\"20\",\"21\",\"22\", ... ,\"5\",\"50\",\"51\",\"52\", ...);
  4.  
  5. ?>

to sortujesz stringi i nic dziwnego że dostajesz :
Cytat
52 51 50 5 ... 22 21 20 2 ... 11 10 1


Jak dasz tak :
  1. <?php
  2.  
  3. $tablica = array(1,10,11, ... ,2,20,21,22, ... ,5,50,51,52, ...);
  4.  
  5. ?>

to posortujesz liczby i dostaniesz :
Cytat
52 51 50 ... 22 21 20 ... 11 10 ... 5 ... 2 1

czyli to czego oczekujesz.
dr_bonzo
  1. <?php
  2. function cmp( $a, $b ) 
  3. {
  4. // sortujesz liczby calkowite, nie stringi
  5. $a = intval( $a );
  6. $b = intval( $b );
  7.  
  8. if ( $a === $b )
  9. {
  10. return 0;
  11. }
  12.  
  13. return ( $a < $b ) ? -: 1;
  14. }
  15.  
  16. $tablica = array( &#092;"1\", \"10\", \"11\", \"2\", \"20\", \"21\", \"22\", \"5\", \"50\", \"51\", \"52\" );
  17.  
  18. print( 'Przed sortowaniem: <br />' );
  19.  
  20. foreach ( $tablica as $element )
  21. {
  22. print( &#092;"$element<br />\" );
  23. }
  24.  
  25. usort( $tablica, &#092;"cmp\" );
  26.  
  27.  
  28. print( 'Po sortowaniu: <br />' );
  29.  
  30. foreach ( $tablica as $element )
  31. {
  32. print( &#092;"$element<br />\" );
  33. }
  34. ?>
Nosfi
OK.

O to właśnie chodziło ... dzięki dr_bonzo!
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.