Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]foreach a if, pętla wykonuje zarówno if jak i else
matyskiewicz
post 19.05.2009, 11:17:23
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 3
Dołączył: 6.10.2006
Skąd: Poznań

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


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. ?>


Ten post edytował matyskiewicz 19.05.2009, 11:19:11


--------------------
eclipse :)
Go to the top of the page
+Quote Post
nospor
post 19.05.2009, 11:21:21
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
matyskiewicz
post 19.05.2009, 11:26:29
Post #3





Grupa: Zarejestrowani
Postów: 184
Pomógł: 3
Dołączył: 6.10.2006
Skąd: Poznań

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


Cytat(nospor @ 19.05.2009, 12:21:21 ) *
iterujesz

questionmark.gif


--------------------
eclipse :)
Go to the top of the page
+Quote Post
nospor
post 19.05.2009, 11:27:45
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




foreach + iterowac = przechodzic przez kolejne elementy tablicy przy pomocy foreach


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Largo
post 19.05.2009, 11:27:49
Post #5





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Witam,

Iteracja

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

Pozdrawiam,
Largo

Ten post edytował Largo 19.05.2009, 11:29:26
Go to the top of the page
+Quote Post
matyskiewicz
post 19.05.2009, 11:44:31
Post #6





Grupa: Zarejestrowani
Postów: 184
Pomógł: 3
Dołączył: 6.10.2006
Skąd: Poznań

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


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ę)

Ten post edytował matyskiewicz 19.05.2009, 11:45:19


--------------------
eclipse :)
Go to the top of the page
+Quote Post
nospor
post 19.05.2009, 11:47:04
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
matyskiewicz
post 19.05.2009, 12:03:33
Post #8





Grupa: Zarejestrowani
Postów: 184
Pomógł: 3
Dołączył: 6.10.2006
Skąd: Poznań

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


  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?


--------------------
eclipse :)
Go to the top of the page
+Quote Post
erix
post 19.05.2009, 12:25:43
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
matyskiewicz
post 19.05.2009, 13:53:16
Post #10





Grupa: Zarejestrowani
Postów: 184
Pomógł: 3
Dołączył: 6.10.2006
Skąd: Poznań

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


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. ?>


--------------------
eclipse :)
Go to the top of the page
+Quote Post
PrinceOfPersia
post 19.05.2009, 15:32:47
Post #11





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


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;


--------------------
Go to the top of the page
+Quote Post
erix
post 19.05.2009, 18:16:55
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:43