Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]problem z losowaniem słów
Forum PHP.pl > Forum > Przedszkole
imagizer
Witajcie, stworzyłem skrypt dodawania tagów do newsa, aczkolwiek mam duzy problem z mixowaniem ich,
próbowałem na wiele sposobów i żaden nie działa.
w tabeli tagi mam rekord z tagami po przecinku np: tag1,tag2,tag3
rozdzieliłem je za pomocą explode do tablicy, i dodałem link.

następnie próbowałem rozdzielać arrayem z funkcją shuffle i nic:/
Chce aby z x ilości tagów wybrało mi 4 i wyświetliło je losowo np: tag3 tag1 tag2

Miło by było aby ktoś doradził mi jak rozwiązać ten problem.

  1.  
  2. // Wyciąganie Częstotliwości z grupy
  3. $zapytanie43=pytanie_mysql("SELECT * FROM tagi WHERE tagID='$nazwagrupy'");
  4. while($rowio=mysql_fetch_array($zapytanie43)){
  5. $tagis=$rowio['tag'];
  6. }
  7.  
  8. // wykorzystanie funkcji explode, wg przecinka
  9. $tags = explode (",", $tagis);
  10. $tagi='
  11. <a href="tag,'.$tags[0].'.html"><span class="tagi">'.$tags[0].'</span></a>
  12. <a href="tag,'.$tags[1].'.html"><span class="tagi">'.$tags[1].'</span></a>
  13. <a href="tag,'.$tags[2].'.html"><span class="tagi">'.$tags[2].'</span></a>
  14. <a href="tag,'.$tags[3].'.html"><span class="tagi">'.$tags[3].'</span></a>
  15. ';
mmmmmmm
Pora zmienić układ danych.
imagizer
Próbowałem wielu sposobów żaden nie działa;/
typu:
  1. function losowanie(){
  2. $los = array($tags[0],$tags[1],$tags[2],$tags[3]);
  3. shuffle($los);
  4.  
  5. return implode(' | ', $los);
  6. }
  7.  
  8. echo losowanie();
RiE
Co to znaczy że shuffle() nie zadziałało?

1. shuffle()
  1. $tags = explode (",", $tagis);
  2. shuffle($tags);
  3. $tagi='
  4. <a href="tag,'.$tags[0].'.html"><span class="tagi">'.$tags[0].'</span></a>
  5. <a href="tag,'.$tags[1].'.html"><span class="tagi">'.$tags[1].'</span></a>
  6. <a href="tag,'.$tags[2].'.html"><span class="tagi">'.$tags[2].'</span></a>
  7. <a href="tag,'.$tags[3].'.html"><span class="tagi">'.$tags[3].'</span></a>


W starszych wersjach PHP, losowość z shuffle() była dość prymitywna i dostawało się prawie nie zmienioną tablice, ale obecnie fukcja ta działa bardzo dobrze.

2. array_rand()

  1. $tags = explode (",", $tagis);
  2. $random = array_rand($tags, 4);
  3. $tagi='
  4. <a href="tag,'.$tags[$random[0]].'.html"><span class="tagi">'.$tags[$random[0]].'</span></a>
  5. <a href="tag,'.$tags[$random[1]].'.html"><span class="tagi">'.$tags[$random[1]].'</span></a>
  6. <a href="tag,'.$tags[$random[2]].'.html"><span class="tagi">'.$tags[$random[2]].'</span></a>
  7. <a href="tag,'.$tags[$random[3]].'.html"><span class="tagi">'.$tags[$random[3]].'</span></a>


Weź jeszcze pod uwagę że w przypadku kiedy masz małą ilość tagów, np. 4 to może się zdarzyć tak, że akurat wszystkie będą w tej samej kolejności.
nospor
Przeciez w funkcji losowanie() tablica $tags nie jest widoczna.... poczytaj o zasiegu zmiennych lub przekazuj $tags jako parametr do funkcji

zas dla mmmmmm zapewne chodzilo, ze musisz poprawic strukture bazy na prawidlowa
imagizer
Super, działa, Dzięki RiE
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.