Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]foreach a if
Forum PHP.pl > Forum > Przedszkole
matyskiewicz
Witam
Napisałem funkcję:
  1. <?php
  2. function addToCart($zamId, $zamIlosc)
  3. {
  4.    $item = isset($_SESSION['cart']) ? $_SESSION['cart'] : null; //deklaracja
  5.    
  6.    if($item == null) //dodajemy do tablicy $_SESSION['cart'][0] dane
  7.    {
  8.        $_SESSION['cart'][] = array('id' => $zamId, 'ilosc' => $zamIlosc);
  9.    }
  10.    else //sprawdzamy czy id istnieje już w tablicy jeśli tak to zwiększamy o jeden, jeśli nie to dodajemy $_SESSION['cart'][n+1]
  11.    {
  12.        foreach($_SESSION['cart'] as $key => $value)
  13.        {
  14.               if ($value['id'] == $zamId)
  15.               {
  16.                   $_SESSION['cart'][$key]['ilosc']++;  
  17.                 echo'zwiększono o 1';
  18.                 break;                
  19.               }
  20.  
  21.               else
  22.               {
  23.                $_SESSION['cart'][] = array('id' => $zamId, 'ilosc' => $zamIlosc);
  24.                echo'dodno nowy';                  
  25.                        }
  26.        }    
  27.    }    
  28. }
  29. ?>

Funkcja działa następująco
1.dodajemy dane do tablicy
a) jeśli chcemy zwiększyć wartość ilość - dodaje
cool.gif jeśli dodamy nowe dane - dodaje
2. jeśli w bazie tabeli mamy kilka elementów i chcemy zwiększyć ilość powiedzmy w 1 to foreach wykona zarówno to co jest w if jak i w else... Proszę o wskazówkę gdzie popełniłem błąd.Pozdrawiam

EDIT przykład tablicy po dodaniu nowego elementu, a następnie aktualizacji poprzedniego:
  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [id] => 6
  6.            [ilosc] => 4
  7.        )
  8.  
  9.    [1] => Array
  10.        (
  11.            [id] => 23
  12.            [ilosc] => 1
  13.        )
  14.  
  15.    [2] => Array
  16.        (
  17.            [id] => 6
  18.            [ilosc] => 1
  19.        )
  20.  
  21. )
  22. ?>
nospor
podpowiedź:
w foreach iterujesz po wszystkich elementach. Dopoki nie natrafisz na ten wlasciwy, to dodajesz do tablicy jak leci. Dopiero jak natrafisz na wlasciwy to zwiekszasz licznik i konczysz iteracje.
No i tu jest pies pogrzebany. pomysl jak to naprawic winksmiley.jpg
matyskiewicz
Cytat(nospor @ 19.05.2009, 12:21:21 ) *
iterujesz

questionmark.gif
nospor
foreach + iterowac = przechodzic przez kolejne elementy tablicy przy pomocy foreach
Largo
Witam,

Iteracja

PS. nospor był szybszy o parę sekund :-)

Pozdrawiam,
Largo
matyskiewicz
Czyli teoretycznie odwrócenie instrukcji powinno pomóc
  1. <?php
  2. foreach($_SESSION['cart'] as $key => $value)
  3.        {
  4.               if ($value['id'] !== $zamId)
  5.               {
  6.                $_SESSION['cart'][] = array('id' => $zamId, 'ilosc' => $zamIlosc);
  7.                echo'dodno nowy';            
  8.               }
  9.               else
  10.               {
  11.                   $_SESSION['cart'][$key]['ilosc']++;  
  12.                 echo'zwiększono o 1';
  13.                 break;
  14.               }
  15.        }
  16. ?>

ale problem pojawia się ponownie po operacji:
1. dodaje 1 wartosc
2. podaje 2 wartosc
3. aktualizuje 1 wartosc
4. aktualizuje 2 wartość:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [id] => 6
  6. [ilosc] => 2
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [id] => 14
  12. [ilosc] => 2
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [id] => 14
  18. [ilosc] => 1
  19. )


PS.
Dziękuję za definicję (myślałem że popełniłeś literówkę)
nospor
Cytat
Czyli teoretycznie odwrócenie instrukcji powinno pomóc
PRzeciez to jest dokladnie to samo tylko inaczej zapisane....

dobra, niech ktos inny przejmie paleczke smile.gif

Cytat
Dziękuję za definicję (myślałem że popełniłeś literówkę)
I ze niby co tam mialo byc zamiast slowa "iterować" ? Ciekawi mnie z jakiego wyrazu mialaby byc ta literowka smile.gif
matyskiewicz
  1. <?php
  2. foreach($_SESSION['cart'] as $key => $value)
  3.        {
  4.               if ($value['id'] == $zamId)
  5.               {
  6.                $_SESSION['cart'][$key]['ilosc']++;          
  7.               }
  8.        }
  9. ?>

ok, aktualizuje lecz nie dodaje nowego wpisu. W jaki sposób więc mogę sprawdzić czy pętla coś zwróciła?
erix
Yyyy...?

  1. <?php
  2. $jest = false;
  3. for/foreach/while(){
  4.  $jest = true;
  5.  //...
  6. }
  7. ?>


Zwracać może funkcja, a nie pętla... Sprecyzuj.
matyskiewicz
Opornie ale się udało:
  1. <?php
  2. function addToCart($zamId, $zamIlosc)
  3. {
  4.    $item = isset($_SESSION['cart']) ? $_SESSION['cart'] : null;
  5.    
  6.    if($item == null)
  7.    {
  8.        $_SESSION['cart'][] = array('id' => $zamId, 'ilosc' => $zamIlosc);
  9.    }
  10.    else
  11.    {
  12.        foreach($_SESSION['cart'] as $key => $value)
  13.        {
  14.               if ($value['id'] == $zamId)
  15.               {
  16.                   $updateId = $key;
  17.                $update = true;    
  18.               }
  19.        }
  20.                
  21.        if($update == false)
  22.        {
  23.            $_SESSION['cart'][] = array('id' => $zamId, 'ilosc' => $zamIlosc);
  24.        }
  25.        else
  26.        {
  27.            $_SESSION['cart'][$updateId]['ilosc']++;
  28.            $update = false;    
  29.        }
  30.    }        
  31.    
  32.    header("location: index.php?module=shoppingCart");
  33. }
  34. ?>
PrinceOfPersia
Cytat(matyskiewicz @ 19.05.2009, 14:53:16 ) *
Opornie ale się udało:
  1. <?php
  2. foreach($_SESSION['cart'] as $key => $value)
  3.        {
  4.               if ($value['id'] == $zamId)
  5.               {
  6.                   $updateId = $key;
  7.                $update = true;    
  8.               }
  9.        }
  10. ?>

i break po tym. Po co ma dalej przechodzić jak już znalazł.

$updateId = $key;
$update = true;
break;
erix
Nie wiem, za co dostałem pomógła, ale Twój kod ustawia zmienną update, a i tak jej nie zwraca poza funkcję. ;p
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.