Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzenie czy poprzedni element tablicy równy bieżącemu
Forum PHP.pl > Forum > Przedszkole
arzach
Witam mam taką tablice
Kod
Array
(
    [0] => Array
        (
            [pkt] => 6
            [zdobyte] => 9
        )

    [1] => Array
        (
            [pkt] => 6
            [zdobyte] => 10
        )

    [2] => Array
        (
            [pkt] => 4
            [zdobyte] => 5
        )

    [3] => Array
        (
            [pkt] => 3
            [zdobyte] => 6
        )
)

i jak sprawdzić czy bieżący element jest równy poprzedniemu próbowałem to zrobić tak i nie działa
  1. $lp1 = 1;
  2. foreach ($wyniki AS $klucz => $wiersz) {
  3. if(!$lp1 == 1){
  4. $index = $lp1-1;
  5. if($wiersz['pkt'] == $wyniki[$index]['pkt'] && $wiersz['zdobyte'] == $wyniki[$index]['zdobyte']){ echo 'tak'; }
  6. }
  7. $lp1++;
  8. }
wookieb
Nie używaj lpl bo jest Ci niepotrzebna. Użyj $klucz i powinno być ok.
arzach
No tak, ale $klucz zwraca bieżący klucz a jak zrobię tak to i tak nie działa
  1. if($klucz !== 0 && $klucz !== 1){
  2.  
  3. if($wiersz['pkt'] == $wyniki[$klucz - 1]['pkt'] && $wiersz['zdobyte'] == $wyniki[$klucz - 1]['zdobyte']){ echo 'tak'; }
  4.  
  5.  
  6. }


Nie działa tak jak chciałem bo za każdym razem wychodzi że dwa pierwsze elementy są takie same co jest nie możliwe.

Ma to działać tak że z pomięciem pierwszego elementu. Każdy następny ma sprawdzać czy jest równy poprzedniemu czyli gdy element drugi jest równy pierwszemu gdy element trzeci jest równy drugiemu i itd
thek
Wookieb ma pewnie na myśli pewne rozwiązanie, które wyemituje warninga na koniec, ale chodzi mu chyba o coś w stylu:
  1. foreach ($wyniki AS $klucz => $wiersz) {
  2. if($wiersz['pkt'] == $wyniki[$klucz+1]['pkt'] ) {
  3. echo 'Wpisy pod indeksami kluczy: '.$klucz.' oraz '.($klucz+1).' mają po '.$wiersz['pkt'].' punktów i są sobie równe.';
  4. }
  5. }
Poza tym zawsze możesz zrobić jeszcze coś innego... Pierwszy element tablicy "ominąć" używając continue; i porównywać element obecny do poprzedniego ($klucz-1) lub to samo dla ostatniego i wtedy ($klucz+1) jak w przykładzie wyżej. Warunek używający continue robisz przed pętlą sprawdzającą równość elementów sąsiednich.

EDIT: Oczywiście przyjmujemy, że nie ma luk w numeracji kluczy. Od 0 do jakiejś tam liczby bez "dziur". Bez tego musielibyśmy kombinować z iteratorami tablicowymi.
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.