Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sortowanie większej tablicy
Forum PHP.pl > Forum > Przedszkole
adiq
Witam,
posiadam tablice:
  1. [1] => Array
  2. (
  3. [id] => 1
  4. [ilosc] => 4
  5. [name] => hadwao1
  6. [num] => aaa
  7. [tytul] => aaa
  8. )
  9.  
  10. [2] => Array
  11. (
  12. [id] => 2
  13. [ilosc] => 1
  14. [name] => w616
  15. [num] => aaa
  16. [tytul] => taaa
  17. )
  18.  
  19. [3] => Array
  20. (
  21. [id] => 3
  22. [ilosc] => 2
  23. [name] => zadek1234
  24. [num] => aaa
  25. [tytul] => aaa
  26. )
  27.  
  28. [4] => Array
  29. (
  30. [id] => 4
  31. [ilosc] => 6
  32. [name] => w887
  33. [num] => sss
  34. [tytul] => fff
  35. )
  36.  


Dane wyświetlam w pętli, niestety nie tak jak bym chciał. Dane wyświetlają się wg. id od najmniejszego.

Chciałbym aby tablice sortowały się wg. ilosci od największej, Proszę o pomoc!

Oto kod odpowiedzialny za wyświetlanie:
  1. for($r=1;$r<$xm;$r++) {
  2. $nazwa[$r]=str_replace("_", " ", $wynikk[$r][tytul]);
  3. echo '<tr><td><img src=images/img.png border=0 /></td><td><a style="color: black;" href=pokaz,'.$wynikk[$r][name].','.$wynikk[$r][num].','.$wynikk[$r][tytul].'.php />'.$nazwa[$r].'</a></td></tr>';
  4.  
  5. }


Proszę o pomoc winksmiley.jpg
wookieb
Wszystkie ze słowem sort
http://pl2.php.net/manual/en/ref.array.php
Użys usort albo array_multisort i nie pytaj się JAK użyć bo w manuala pisze jak wól.
Eagle
Możesz wyświetlać od końca

  1. $rozmiar = sizeof($tablica)
  2. for($i = $rozmiar; $i<=0; $i--)
  3. {
  4. print_r ($tablica[$i]);
  5. }


Albo manual i 'sort'
http://us.php.net/manual/en/function.arsort.php
adiq
Cytat(wookieb @ 14.09.2009, 22:52:01 ) *
Wszystkie ze słowem sort
http://pl2.php.net/manual/en/ref.array.php
Użys usort albo array_multisort i nie pytaj się JAK użyć bo w manuala pisze jak wól.

Załamie cię i napisze JAK!?

W manualu przykład:
  1. $fruits = array("lemon", "orange", "banana", "apple");
  2. sort($fruits);

no problem, tylko jak posortowac cala moja wielka tablice wg. ilosci i ją dobrze wyświetlic.

Cytat(Eagle @ 14.09.2009, 22:55:37 ) *
Możesz wyświetlać od końca

  1. $rozmiar = sizeof($tablica)
  2. for($i = $rozmiar; $i<=0; $i--)
  3. {
  4. print_r ($tablica[$i]);
  5. }


Albo manual i 'sort'
http://us.php.net/manual/en/function.arsort.php


Wyświetlanie od końca nic nie da, bo w dalszym ciągu nic się nie będzie zgadzac.
adiq
Cytat(Eagle @ 14.09.2009, 23:00:52 ) *

Istnieje problem, ponieważ w dalszym ciągu nie wiem jak posortowac.

Jezeli znadzie się ktoś i napisze mi mały przykład z takimi tablicami:
  1. [1] => Array
  2. (
  3. [id] => 1
  4. [ilosc] => 4
  5. [name] => hadwao1
  6. [num] => faxcsax
  7. [tytul] => cascas
  8. )
  9.  
  10. [2] => Array
  11. (
  12. [id] => 2
  13. [ilosc] => 1
  14. [name] => w616
  15. [num] => ascas
  16. [tytul] => acsacsca
  17. )
  18.  
  19. [3] => Array
  20. (
  21. [id] => 3
  22. [ilosc] => 2
  23. [name] => acscacas
  24. [num] => 7
  25. [tytul] => acaca
  26. )
  27.  

oraz wyświetlanie w schemacie: name-tytul oczywiście wg. ilosci.
wookieb
Cytat(adiq @ 14.09.2009, 22:46:41 ) *
Załamie cię i napisze JAK!?

A czy ja pisze do człowieka czy maszyny, która nie posiada nawet sztucznej inteligencji?

MANUAL:
  1. function cmp($a, $b)
  2. {
  3. if ($a == $b) {
  4. return 0;
  5. }
  6. return ($a < $b) ? -1 : 1;
  7. }
  8.  
  9. $a = array(3, 2, 5, 6, 1); // tutaj wstaw swoja tablicę
  10.  
  11. usort($a, "cmp");
  12.  

A teraz magia!!!
  1. function cmp($a, $b)
  2. {
  3. if ($a['ilosc'] == $b['ilosc']) {
  4. return 0;
  5. }
  6. return ($a['ilosc'] < $b['ilosc']) ? -1 : 1;
  7. }

Toż to niesamowite... Ale patrząc na twój wynik to zapewne otrzymujesz go z bazy danych a sortowanie robi się ZAPYTANIEM. (ORDER BY)
Czy to było tak cholernie trudne? Dodatkowo miałeś na tej samej stronie manuala przykład jak to zrobić z kluczami które zawierają string (chwila "przeróbki" i masz co chcesz) ... CZYTAĆ LUDZIE!
teherty
Utwórz drugą tablicę i zapisuj do niej same wartości $liczba zgodnie z indeksem. Użyj sort() na tej tablicy i wyświetl podstawową tablicę po indeksach z tej posortowanej.
Zawsze jakaś opcja, aczkolwiek nie wiem czy ten kod działa.

  1. $k = 0;
  2. foreach($baza as $wpis){
  3. $sort[$k] = $liczba;
  4. $k++;
  5. }
  6. sort($sort);
  7. foreach($sort as $klucz => $sortl) {
  8. echo $baza[$klucz] . '<br />';
  9. }
adiq
Cytat(wookieb @ 14.09.2009, 23:13:34 ) *
Ale patrząc na twój wynik to zapewne otrzymujesz go z bazy danych a sortowanie robi się ZAPYTANIEM. (ORDER BY)
Czy to było tak cholernie trudne? Dodatkowo miałeś na tej samej stronie manuala przykład jak to zrobić z kluczami które zawierają string... CZYTAĆ LUDZIE!

Tak, dane pobieram z bazy MySQL w pętli, przy użyciu WHERE `id`='$petla'.
Taki kod pobiera mi wszystkie dane, niestety wg.id.
Próbowałem pobierac dane posortowane wg. ilosci niestety otrzymywalem klika tych samych tabel, zamiast różnych.

Używam pętli for, może jakieś rozwiązanie dzięki któremu pobiorą się już posegregowane?

Oto pobieranie:
  1. for($x=0;$x<$xm;$x++) {
  2. $zapytaniee[$x]=sprintf("SELECT * FROM `pob` WHERE `id`='".$x."'");
  3. $queryy[$x]=mysql_query($zapytaniee[$x]);
  4. $wynikk[$x]=mysql_fetch_assoc($queryy[$x]);
  5. }
wookieb
Nie wierze własnym oczom... Ale chwała ci, że podałeś kod smile.gif

  1. for($x=0;$x<$xm;$x++)
  2. {
  3. // pobierasz od 0 do $xm to samo to id < $xm [oraz] $id>=0
  4. $zapytaniee[$x]=sprintf("SELECT * FROM `pob` WHERE `id`='".$x."'")
  5. //Po co używasz sprintf?? wiesz co czego w ógole służy?
  6. }

  1. $zapytanieeeeeeeeeeeeeeeeeeeee = mysql_query('SELECT * FROM pob where id< '.$xm.' ORDER BY ilosc');

I pobierasz sobie wszystkie wyniki...
adiq
Cytat(wookieb @ 14.09.2009, 23:24:49 ) *
Nie wierze własnym oczom... Ale chwała ci, że podałeś kod smile.gif

  1. for($x=0;$x<$xm;$x++)
  2. {
  3. // pobierasz od 0 do $xm to samo to id < $xm [oraz] $id>=0
  4. $zapytaniee[$x]=sprintf("SELECT * FROM `pob` WHERE `id`='".$x."'")
  5. //Po co używasz sprintf?? wiesz co czego w ógole służy?
  6. }

  1. $zapytanieeeeeeeeeeeeeeeeeeeee = mysql_query('SELECT * FROM pob where id< '.$xm.' ORDER BY ilosc');

I pobierasz sobie wszystkie wyniki...

Pobrało tylko tablice o id 2 ...
wookieb
No a pokaż teraz kod.
adiq
Cytat(wookieb @ 14.09.2009, 23:37:08 ) *
No a pokaż teraz kod.

  1. $zapytaniee = mysql_query('SELECT * FROM pob where id< '.$xm.' ORDER BY ilosc');
  2. $wynikk=mysql_fetch_assoc($zapytaniee);
wookieb
Wiedziałem. 0 podstaw. Bierz się za kurs.
http://pl2.php.net/mysql_fetch_assoc i przeczytaj bardzo dokładnie
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.