• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawność warunku w pętli foreach

0 głosów
233 wizyt
pytanie zadane 11 grudnia 2022 w PHP przez lewur Początkujący (470 p.)
Witam mam problem z zadaniem z języka php.. Pod zmienną $rows przechowywana jest zwrócona zapytaniem SQL tablica, której fragment jest poniżej. W pętli foreach($rows as $i => $row) potrzebuje zrobić warunek który będzie porównywał mi marki w następnych tablicach w tablicy (niżej schemat tablicy znajdującej się pod zmienną $rows). W pętli chciałbym stworzyć warunek, który będzie sprawdzał kiedy zmienia się marka i wtedy wypisuje mi nowy wiersz (<tr>) w tabeli. Mój aktualny warunek to if( $rows[$i]['marka] != $rows[$i+1]['marka]){...}. Chciałbym dowiedzieć się jak zrobić to poprawnie, aby taki warunek miał sens i aby mój warunek nie wyleciał za zakres tablicy.

Array
(
    [0] => Array
        (
            [poczatek] => 2021-11-05 00:00:00
            [koniec] => 2022-12-07 15:00:00
            [kategoria] => auto
            [status] => dostepne
            [silnik] => diesel
            [marka] => Audi
            [rok] => 2006
        )

    [1] => Array
        (
            [poczatek] => 2021-11-05 00:00:00
            [koniec] => 2022-12-07 15:00:00
            [kategoria] => auto
            [status] => dostepne
            [silnik] => diesel
            [marka] => Fiat
            [rok] => 2006
        )

2 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2022 przez a1pako Nowicjusz (140 p.)

Aby sprawdzić, czy wartość zmiennej marka się zmieniła, możesz użyć poniższego warunku:

if ($i > 0 && $rows[$i]['marka'] != $rows[$i - 1]['marka']) {
    // wypisz nowy wiersz w tabeli
}

W tym warunku sprawdzamy, czy indeks aktualnego elementu jest większy od zera (aby uniknąć wyjścia poza zakres tablicy) i czy aktualna wartość zmiennej marka różni się od wartości zmiennej marka w poprzednim elemencie tablicy. Jeśli oba te warunki są spełnione, wypisujemy nowy wiersz w tabeli.

Pamiętaj, że w pętli foreach indeks elementów tablicy jest zawsze ukrywany i nie jest dostępny bezpośrednio. Jeśli chcesz mieć dostęp do indeksu elementu w pętli foreach, musisz użyć następującej składni:

foreach($rows as $i => $row) {
    // tutaj $i zawiera indeks elementu
}

Użycie tej składni umożliwi Ci dostęp do indeksu elementu w pętli i użycie go w warunku, o którym mowa powyżej.

0 głosów
odpowiedź 12 grudnia 2022 przez VBService Ekspert (256,600 p.)
edycja 12 grudnia 2022 przez VBService

W pętli chciałbym stworzyć warunek, który będzie sprawdzał kiedy zmienia się marka i wtedy wypisuje mi nowy wiersz (<tr>) w tabeli

proponuję, bez użycia indeksu

[ on-line ]

$rows = [ // Przykładowa tablica
    [
        'marka' => 'Audi',
        'rok'   => '2006'
    ],
    // ...
    [
        'marka' => 'Fiat',
        'rok'   => '2006'
    ]
];

$test_marka = $rows[0]['marka'];
$table = '<tr>';

foreach ($rows as $row)
    if ($test_marka == $row['marka'])
        $table .= '<td>' . $row['marka'] . '</td><td>' . $row['rok'] . '</td>';
    else {
        $table .= '</tr><tr><td>' . $row['marka'] . '</td><td>' . $row['rok'] . '</td>';
        $test_marka = $row['marka'];
    }
    
$table .= '</tr>';

 

Podobne pytania

0 głosów
1 odpowiedź 1,197 wizyt
pytanie zadane 11 maja 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 401 wizyt
pytanie zadane 26 lutego 2023 w PHP przez ayo1001 Obywatel (1,890 p.)
0 głosów
1 odpowiedź 721 wizyt
pytanie zadane 22 września 2022 w PHP przez NoteDS Użytkownik (560 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...