Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana ostatniego wyniku z pętli while()
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Siemka,

Sprawa wydaje się być dość błaha ale jakoś nie mogę wymyślić rozwiązania.

Otóż mam pętle while wyświetlającą nazwiska. Jeśli jest ich więcej niż jedno, czyli jeśli $num>1 to wstawiany jest między nie przecinek.
  1. $num=mysql_num_rows($result);
  2. while($row=mysql_fetch_array($result,MYSQL_NUM)){
  3. echo $row[0];
  4. if($num>1){echo ' , ';}
  5. }

Pytanie moje brzmi: jak zrobić żeby po ostatnim wyniku (nazwisku) nie pojawiał się ten przecinek?
f1xer
  1. $num=mysql_num_rows($result);
  2. $i=1; //ustawiamy licznik na pierwszym nazwisku
  3. while($row=mysql_fetch_array($result,MYSQL_NUM)){
  4. echo $row[0];
  5. if($num>1 && $i!=$num){echo ' , ';} //czyli tylko wtedy gdy jest więcej niż jedno nazwisko i gdy wyświetlane nazwisko nie jest ostatnie
  6. $i++;
  7. }

Nie testowałem, ale wydaje mi się że powinno działać.
Zyx
Do czegoś takiego w ogóle nie jest potrzebna znajomość liczby elementów. Wystarczy wyświetlać przecinek przed wierszem.

  1. $first = false;
  2. while($element = pobierzDane())
  3. {
  4. if($first)
  5. {
  6. echo ', ';
  7. }
  8. else
  9. {
  10. $first = true;
  11. }
  12. wyswietlElement($element);
  13. }


Nawiasem mówiąc Open Power Template posiada wbudowaną taką funkcjonalność.
webdice
  1. $arr= array();
  2.  
  3. while($row=mysql_fetch_array($result,MYSQL_NUM)){
  4. $arr[] = $row[0];
  5. }
  6.  
  7. print implode(', ', $arr);


O ile potrzebujesz cały ciąg znaków.

Cytat(Zyx @ 29.12.2009, 11:11:20 ) *
Nawiasem mówiąc Open Power Template posiada wbudowaną taką funkcjonalność.


Mój czajnik też winksmiley.jpg. To nie ma nic do tematu.
thek
To ja mam kilka możliwości:
1) dokładnie do tego co chcesz - rtrim()
2) optymalizacja tego co dał Zyx, by nie przechodził za każdym razem przez if-else co krok pętli. Jak? Na początku robisz mysql_num_rows przed while. Jeśli 0 - zwracasz false (zabezpieczenie przed pustą listą), jeśli 1 -robisz mysql_fetch_* i zwracasz to jedno znalezione, jeśli większe od 1 wyciągasz pierwsze i lecisz normalnie z pętlą ( ale już bez sprawdzania pierwszego).
Dla wygody i przejrzystości, zamiast robić jakieś switche czy elseif można zrobić zagnieżdżony if na zasadzie:
  1. $ile=mysql_num_rows($result);
  2. if($ile>0) {
  3. $wynik = mysql_fetch_array($result);
  4. $nazwisko = $wynik['nazwisko'];
  5. if($ile > 1) {
  6. while($wynik=mysql_fetch_array( $result ) ) {
  7. $nazwisko .= ', '.$wynik['nazwisko'];
  8. }
  9. }
  10. return $nazwisko;
  11. } else
  12. return false;

W efekcie mamy tylko dwa sprawdzenia zmiennej $ile i pętle ewentualne nie przejmują się sprawdzeniem czy element jest pierwszy.
sadistic_son
Dzięki wszystkim. Potrzebowalem to uzyc w wielu miejscach i co ciekawe wszytkie propozycje wykorzystalem w zaleznosci od pozostalych elementow wewnatrz petli.

f1xer.... $i=0; i juz smiga.
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.