Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]foreach a if, pętla wykonuje zarówno if jak i else
matyskiewicz
post
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
(IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 558
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
matyskiewicz
post
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

(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




foreach + iterowac = przechodzic przez kolejne elementy tablicy przy pomocy foreach
Go to the top of the page
+Quote Post
Largo
post
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
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
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 558
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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
matyskiewicz
post
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?
Go to the top of the page
+Quote Post
erix
post
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.
Go to the top of the page
+Quote Post
matyskiewicz
post
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. ?>
Go to the top of the page
+Quote Post
PrinceOfPersia
post
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
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.09.2025 - 21:31