Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zmiana ostatniego wyniku z pętli while()
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
f1xer
post
Post #2





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


  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ć.
Go to the top of the page
+Quote Post
Zyx
post
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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ść.
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  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ż (IMG:style_emoticons/default/winksmiley.jpg) . To nie ma nic do tematu.
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #6





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował sadistic_son 4.01.2010, 19:16:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 13:05