Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla for w funkcji
Forum PHP.pl > Forum > PHP
x2008x
Witam, mam problem z wyświetlaniem listy w pętli for, wyświetla mi tylko 1 słowo z 5, oto kod:
  1. function slowaList($slowa) {
  2. $lista = explode(",", $slowa);
  3. for($x = 0; $x <= 5; $x++){
  4. $list[$x] = '<ul><li>'.$lista[$x].'</li></ul>';
  5. return $list[$x];
  6. }
  7. }


Nie mogę dać echo zamiast return, bo chcę wyświetlić to w danym miejscu, proszę o pomoc. Dzięki.
Greg0
return przesuń za pętle i zwróć całą tablicę $list bo o to ci przecież chodzi:
  1. return $list;


Przejrzyściej by pewnie było użyć pętli foreach w ten sposób:
  1. $lista = explode(",", $slowa);
  2. $list = array();
  3. $list[] = '<ul>';
  4. foreach($lista as $row){
  5. $list[] = '<li>'.$row.'</li>';
  6. }
  7. $list[] = '</ul>';
  8. return $list;
x2008x
Obydwie metody wskazują Array.
Greg0
Pokazuje Array bo funkcja zwraca tablicę, inaczej się nie da. Funkcja nie może zwracać kilka wartości tylko jedną. Jeśli chcesz żeby wyświetlało kilka wartości musisz wstawić do niej echo co nie jest dobrą praktyką.
x2008x
Właśnie moim celem jest ominięcie echo. Nie mam pomysłu jak rozwiązać ten problem, mam do wyboru dwie opcje:
- w dodawaniu artykułu zapisuję słowa kluczowe jako listę, dzięki tej funkcji,
- w wyświetlaniu artykułu pokazuję listę ze słów kluczowych, dzięki tej funkcji.

Kod całości(używam smarty):
  1. function slowaList($slowa) {
  2. $lista = explode(",", $slowa);
  3. for($x = 0; $x <= 5; $x++){
  4. $list[$x] = '<ul><li>'.$lista[$x].'</li></ul>';
  5. }
  6. return $list[1];
  7. }
  8.  
  9.  
  10. $time = time();
  11. $zap = mysql_query("SELECT * FROM `produkty` WHERE `data_koniec` > '$time' ORDER BY `data_koniec` LIMIT 36");
  12. $ile = mysql_num_rows($zap);
  13. for ( $i=0; $i<$ile; $i++ ) {
  14. $wiersz = mysql_fetch_array($zap);
  15. $wiersz['tnij'] = slowaList($wiersz['slowa']);
  16. $produkt[$i] = $wiersz;
  17.  
  18.  
  19.  
  20. }
gitbejbe
Cytat
function slowaList($slowa) {
$lista = explode(",", $slowa);
for($x = 0; $x <= 5; $x++){
$list[$x] = '<ul><li>'.$lista[$x].'</li></ul>';
}
return $list[1];
}


$time = time();
$zap = mysql_query("SELECT * FROM `produkty` WHERE `data_koniec` > '$time' ORDER BY `data_koniec` LIMIT 36");
$ile = mysql_num_rows($zap);
for ( $i=0; $i<$ile; $i++ ) {
$wiersz = mysql_fetch_array($zap);
$wiersz['tnij'] = slowaList($wiersz['slowa']);
$produkt[$i] = $wiersz;
}

facepalmxd.gif

Ty w ogóle wiesz co napisałeś ? ^^ Zrób coś z tym lepiej - nie wiem usuń spal internet czy coś, ale nie pokazuj takich rzeczy publicznie !

a teraz na poważnie: aby wyświetlić tablice robisz coś takiego:
  1. $wiersz = mysql_fetch_array($zap);
  2. $lista = explode(",", $wiersz['slowa']);
  3.  
  4. foreach ($lista as $klucz => $wartosc)
  5. echo "tab['".$klucz."'] ==". $wartosc; // tab[klucz] = klucz tablicy / $wartosc to twoje slowa.

Reszte już sobie ogarniesz

ps: " $wiersz = mysql_fetch_array($zap); $wiersz['tnij'] = slowaList($wiersz['slowa']); $produkt[$i] = $wiersz; " zrobiłeś mi dziurę w mózgu

EDIT:
a i źle ci napisałem, zapomniałem o pętli
  1. while ($wiersz = mysql_fetch_array($zap))
  2. {
  3. $lista = explode(",", $wiersz['slowa']);
  4.  
  5. foreach ($lista as $klucz => $wartosc)
  6. echo "tab['".$klucz."'] ==". $wartosc; // tab[klucz] = klucz tablicy / $wartosc to twoje slowa.
  7. }
zbychoCom
Chyba chodzi Tobie o to, aby funkcja zamiast tablicy zwróciła ciąg (string)

  1. function slowaList($slowa){
  2. $echoString = '<ul>';
  3. $lista = explode(",", $slowa);
  4. for($x = 0; $x <= 5; $x++){
  5. $echoString.= '<li>'.$lista[$x].'</li>';
  6. }
  7. $echoString.='</ul>';
  8. return $echoString;
  9. }
x2008x
Tak chodziło o to, dzięki za pomoc.

gitbejbe PS,
Dzięki za zwrócenie uwagi, faktycznie zrobiłem to źle, ale na błędach się uczy smile.gif
gitbejbe
@up

spoko : ) wiem o co chodzi i to rozumiem - inaczej bym olał temat z podawaniem rozwiązania.
praktyka czyni mistrza

powodzenia : )
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.