Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pętla foreach na for
alberthus
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 16.01.2014

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


Witam

Czy mógłby mi ktoś zamienić pętlę foreach na for? Ona oczywiście poprawnie wyświetla ale chcę ją zamienić na for. Chodzi o wyświetlanie postów już po pobraniu z tabli bazodanowej.

  1. $i = 0;
  2.  
  3. foreach($Rezultat->result() as $Wiersz)
  4. {
  5. $GlownaWpisy['wpisy'][$i]['wpis_id'] = $Wiersz->wpis_id;
  6. $GlownaWpisy['wpisy'][$i]['wpis_tytul'] = $Wiersz->wpis_tytul;
  7. $GlownaWpisy['wpisy'][$i]['wpis_data'] = $Wiersz->wpis_data;
  8. $GlownaWpisy['wpisy'][$i]['wpis_tresc'] = $Wiersz->wpis_tresc;
  9.  
  10. $i++;
  11. }
  12.  
  13.  
Go to the top of the page
+Quote Post
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


możesz mi podać choć jeden powód sensowny takiej zamiany? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
vonski
post
Post #3





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Np. tak:

  1. for($i = 0, $arr = $Rezultat->result(); current($arr) !== false; $i++) {
  2. $el = current($arr);
  3. $GlownaWpisy['wpisy'][$i]['wpis_id'] = $el->wpis_id;
  4. $GlownaWpisy['wpisy'][$i]['wpis_tytul'] = $el->wpis_tytul;
  5. $GlownaWpisy['wpisy'][$i]['wpis_data'] = $el->wpis_data;
  6. $GlownaWpisy['wpisy'][$i]['wpis_tresc'] = $el->wpis_tresc;
  7.  
  8. next($arr);
  9. }


I na kilka innych sposobów też się da (IMG:style_emoticons/default/smile.gif)

Ten post edytował vonski 24.01.2014, 20:32:54
Go to the top of the page
+Quote Post
alberthus
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 16.01.2014

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


Dzięki za odpowiedż.

Tylko nie wiem co robi ta linijka
  1. current($arr) !== false;
czy to jest to samo co
  1. current($arr) == true;
?

Co dokładnie się dzieje w tym miejscu?
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no wykonujesz pętle dopóki current nie zwróci false trzeba było zajrzeć do dokumentacji (IMG:style_emoticons/default/smile.gif)

tylko dalej nie wiem czemu chcesz zmieniać foreach na to (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
vonski
post
Post #6





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


W tej linijce sprawdzasz czy tablica po której iterujesz ma jeszcze jakieś elementy, czy też jej wewnętrzny wskaźnik wyszedł poza nią. Funkcja current() zwraca element tablicy, na który aktualnie wskazuje wspomniany wskaźnik, lub FALSE jeśli wskaźnik jest poza tablicą.
Jeśli chodzi o Twoje pytanie czy można to zapisać w ten sposób:

  1. current($arr) == true;


to o ile w większości przypadków to się sprawdzi, o tyle jeśli elementem tablicy będzie liczba 0, to wtedy wyrażenie 0 == true ma wartość logiczną FALSE więc pętla zostanie przerwana. I teraz jak to napisałem, to sobie zdałem sprawę, że moje rozwiązanie też nie jest do końca idealne, bo przecież elementem tablicy może być też samo FALSE, więc FALSE !== FALSE ewaluuje do FALSE i pętla się przerywa (IMG:style_emoticons/default/smile.gif)
Dlatego trochę to przerobiłem:

  1. for($i = 0, $arr = $Rezultat->result(), $n = count($arr); $i < $n; $i++) {
  2. list($key, $el) = each($arr);
  3.  
  4. $GlownaWpisy['wpisy'][$i]['wpis_id'] = $el->wpis_id;
  5. $GlownaWpisy['wpisy'][$i]['wpis_tytul'] = $el->wpis_tytul;
  6. $GlownaWpisy['wpisy'][$i]['wpis_data'] = $el->wpis_data;
  7. $GlownaWpisy['wpisy'][$i]['wpis_tresc'] = $el->wpis_tresc;
  8. }


To powinno być ok, sorry za zamieszanie (IMG:style_emoticons/default/smile.gif)

Ten post edytował vonski 24.01.2014, 21:45:30
Go to the top of the page
+Quote Post
alberthus
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 16.01.2014

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


Rozumiem, obie wersje działają, jednak próbowałem zrobić to prościej:

  1. for($i=0; $i<count($rezultat); $i++)


tylko nie wiem jak to dalje wyświetlić. Dałoby się tak?
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: 25.08.2025 - 08:13