Ostatnia iteracja pętli foreach

0

Mam pętlę. W niej generuje tabele z wyników z bazy danych:

 foreach ($grupy as $grupa) {
            echo "<h2>" . $nazwy_grup[$grupa] . "</h2>";

  while($row = $result->fetch_assoc()) {
                echo "<tr>";
//tutaj coś jest.
echo "</tr>";

chciałbym na końcu tabeli zrobić takie podsumowanie wyniku - czy mogę sprawdzić kiedy pętla jest iterowana ostatni raz i:

ostatni raz:

echo "<td>" ." Ostani raz:" . $wyswietl ."</td>";

coś tam sobie wyświetlić co będzie bezwzględnie na końcu ... tylko po ostatniej iteracji. Nie mogę wpisać na stałe licznika bo ilość wierszy może się zmieniać w górę lub w dół. Nie mam w sumie pomysłu jak to robić. A cuda w postaci if (table == end) nie działają poprawnie.

1

Ilość wierszy może zmieniać się w trakcie iteracji?
Bo jezeli nie to wystarczy że będziesz iterować od 0 do $grupy.count() - 1 i w ostatnim przebiegu wypisać to co potrzebujesz.

1

Dobrze rozumiem że chcesz podsumowanie dać do ostatniego wiersza razem z danymi ostatniego wiersza? Trochę dziwne, czemu po prostu nie zrobić kolejnego wiersza z podsumowaniem? Wtedy wystarczy po pętli dać kolejne <tr> i nic nie trzeba kombinować.

Żeby wiedzieć że wyświetlasz ostatni wiersz musisz zrobić peek na przód, czyli wołać jeszcze jedno fetch_assoc na przód i sprawdzać czy istnieje. Przykładowo

 $nextRow = $result->fetch_assoc();
 while($row = $nextRow) {
   $nextRow = $result->fetch_assoc();
   // jeśli $nextRow jest nullem to jesteśmy w ostatnim wierszu
   if (!$nextRow) {
       echo "<td>" ." Ostani raz:" . $wyswietl ."</td>";
   }
0

@obscurity

To wygląda tak:

TABELA 1
wiersze i dane
wiersze i dane
//zależy od danych w bazie i przydziale danych

TABELA 2
wiersze i dane
wiersze i dane
//zależy od danych w bazie i przydziale danych

...

//aktualnie bo nie ma więcej niż 5 grup ale w każdej tabeli może być różna ilość danych i może się zmienić
TABELA 5
wiersze i dane
wiersze i dane
PODSUMOWANIE TABELA1 ... 5

Chcę aby podsumowanie bylo tylko pod ostatnią tabelą jako jej część a nie w każdej wcześniejszej.

Edit://
Zrobiłem tak jak podałeś i jest źle.

Jest tak:

TABELA 1
wiersze i dane
wiersze i dane
PODSUMOWANIE TABELA 1...5

TABELA 2
wiersze i dane
wiersze i dane
PODSUMOWANIE TABELA 1...5

a nie tak chciałem :(

edit 2://

Udało się. Z aktualizowałem Twojego if'a . I teraz działa.

if (!$nextRow && end($grupy) === $grupa) {
// to co się dzieje tylko i wyłącznie na koncu
}
3

end() ustawia pointer na ostatni element, na pewno chcesz go użyć?
Może inaczej. Dlaczego w ogóle upierasz się żeby to podsumowanie umieszczać w pętli?
W pętli wykonujesz operacje cykliczne. Utwórz jakieś zmienne pomocnicze i dodatkowy wiersz umieść poza pętlą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1