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

Koszyk zakupów i tablica wielowymiarowa

Object Storage Arubacloud
0 głosów
242 wizyt
pytanie zadane 6 lutego 2016 w PHP przez Pytający Początkujący (290 p.)

Witam,

Robię sobie mały sklep, i napotkałem pewnie początkujący problem.

Mam tablice z produktami:

Array
(
    [0] => Array
        (
            [id] => 12
            [rozmiar] => 10
            [sztuk] => 1
        )

    [1] => Array
        (
            [id] => 123
            [rozmiar] => 44
            [sztuk] => 5
        )
     [2] => Array
        (
            [id] => 1234
            [rozmiar] => 24
            [sztuk] => 8
        )


)

Nie mogę sobie poradzić z wyszukiwaniem produktu który już mam w koszyku o danym id i rozmiarze, bo produktów o danym id może być kilka ale o różnych rozmiarach:

if(isset($_SESSION['koszyk']))
   {
	 $elementy_tablicy = count($_SESSION['koszyk']);
	 for ( $i=0;$i<$n; $i++ )
	  {		 
		 if($_SESSION['koszyk'][$i]['id_produkt'] == $id_prod && $_SESSION['koszyk'][$i]['rozmiar'] == $rozmiar)
		 {
			$_SESSION['koszyk'][$i]= array(  
			"id_produkt"   => $_SESSION['koszyk'][$i]['id_produkt'],
			 "rozmiar"   => $_SESSION['koszyk'][$i]['rozmiar'],
			 "sztuk" => $sztuk);
			 
			echo "już jest";
		 }
		 else
		   {			   
			 echo "nie ma";
		   }
		}   
	}
	else
	 {
	  $_SESSION['koszyk'][]= array(  
	  "id_produkt"   => $id_prod,
	   "rozmiar"   => $rozmiar,
	   "sztuk" => $sztuk);
	 }

Jeżeli wstawię sobie w else zamiast "nie ma" dodawanie produktu to będzie mi go dodawało po pierwszym przeszukaniu w pętli a produkt może być o podanym rozmiarze np na 10 miejscu...

1 odpowiedź

0 głosów
odpowiedź 7 lutego 2016 przez mar3 Gaduła (3,040 p.)

Po pierwsze brak elementu w koszyku możesz stwierdzić dopiero po wyjściu z pętli.

Zapis z linii 8 można skrócić w końcu tylko zwiększasz liczbę sztuk.

W przypadku znalezienia produktu w koszyku możesz przestać dalej szukać za pomocą break.

if(isset($_SESSION['koszyk'])) {
  $n = count($_SESSION['koszyk']);
  $czyJest = false; //zakładam że nie ma takiego produktu w koszyku
  for ( $i=0;$i<$n; $i++ )
  {
    if($_SESSION['koszyk'][$i]['id_produkt'] == $id_prod && $_SESSION['koszyk'][$i]['rozmiar'] == $rozmiar)
    { //okazało się że jest taki prosukt w koszyku
      $_SESSION['koszyk'][$i]['sztuk']++;
      $czyJest = true;
      echo "już jest";
      break; //dalej już nie szukam bo po co
    }
  }

  if($czyJest == false) { //jeżeli takiego produktu nie ma w koszyku               
    echo "nie ma";
    $_SESSION['koszyk'][] = array(  
      "id_produkt"   => $id_prod,
      "rozmiar"   => $rozmiar,
      "sztuk" => 1
    );
  }
} else { //nie istnieje koszyk!
  $_SESSION['koszyk'][] = array(  
    "id_produkt"   => $id_prod,
    "rozmiar"   => $rozmiar,
    "sztuk" => 1
  );
}

 

komentarz 8 lutego 2016 przez Pytający Początkujący (290 p.)
Dzięki, też to rozwiązałem tym "wartownikiem" który sprawdza czy jest produkt. Ale zrobiłem to jeszcze w pętli foreach bo for leci po kolei 1,2,3,4 a tablica może mieć klucze nie po kolei.

Podobne pytania

+1 głos
3 odpowiedzi 149 wizyt
0 głosów
2 odpowiedzi 285 wizyt
0 głosów
0 odpowiedzi 279 wizyt
pytanie zadane 14 października 2022 w C i C++ przez Eliasz Nowicjusz (200 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...