Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sortowanie i wyświetlanie elementów
Forum PHP.pl > Forum > PHP
bolek117
Witam

Mam następujący problem. W pętli z tabeli pobieram z bazy jedno pole w którym znajdują się wyrazy przedzielone przecinkami np. "tag1, tag2, tag3, tag2, tag3, tag2". Rozbijam je do pojedynczych wyrazów funkcją Explode i zapisuje je w tablicy (array). Przykładowa tablica wygląda tak:
  1. Array
  2. (
  3. [0] => tag1
  4. [1] => tag2
  5. [2] => tag3
  6. [3] => tag2
  7. [4] => tag3
  8. [5] => tag2
  9. )


Następnie funkcją array_count_values() zliczam ilość powtórzeń każdego z wyrazów. Przykładowa tablica wygląda tak:
  1. Array
  2. (
  3. [tag1] => 1
  4. [tag2] => 3
  5. [tag3] => 2
  6. )


Chciałbym następnie posortować te tagi według ilości powtórzeń (od największej od najmniejszej) a następnie wyświetlić je. Przykładowy wynik powinien wyglądać tak:
  1. tag2, tag3, tag1


Jak to zrobić?? Przyjmę każdy pomysł, nawet zmianę kodu od podstaw.
nevt
array_sort() ??
bolek117
Wielkie dzięki smile.gif Dokładnie chodziło o funkcję arsort(). Dwa dni nad tym siedziałem, byłem już blisko bo przy funkcji sort() ale nie udawało mi się, chociaż miałem kodu na 4kb biggrin.gif A oto jaki kod zastosowałem:
  1. <?php
  2. //Definicja danych do pobrania
  3. $result = mysql_query("SELECT tags FROM prefix_art");
  4.  
  5. //Pobierz dane z bazy w pętli
  6. while($row = mysql_fetch_array($result)) {
  7.  
  8. //Rozbij wyniki z bazy na pojedyncze wyrazy
  9. $tags = explode(", ", $row['tags']);
  10.  
  11. //Zlicz łączną ilość wyrazów
  12. $ile_tag = count($tags);
  13.  
  14. //Stwóż tablice z podanych wyrazów
  15. for($i=0;$i<$ile_tag;$i++) {
  16. $tab[] = $tags[$i];
  17. }
  18. }
  19.  
  20. //Zlicz ilość powtórzeń każdego wyrazu w tabeli
  21. $ile = array_count_values($tab);
  22.  
  23. //Posortuj wyniki od największego do najmniejszego
  24. $tablica_sortowana = arsort($ile);
  25.  
  26. $i = 0;
  27.  
  28. //Wyświetl wyniki
  29. foreach($ile as $klucz => $wartosc) {
  30. $i++;
  31. echo "$klucz (Ilość powtórzeń: $wartosc); ";
  32.  
  33. //Zatrzymaj pętle po wyświetleniu x wyników
  34. $x = 5;
  35. if ($i >= $x) break;
  36. }
  37. ?>
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.