Operacje na tablicach PROBLEM

0

Witam

Cały dzień męczę się nad skryptem który potrafiłby dodać/usunąć/edytować elementy tablicy:

Mam taką tablicę:

Array
(
    [0] => Array
        (
            [id] => 1
            [ilosc] => 1
            [cena] => 15.20
        )

    [1] => Array
        (
            [id] => 8
            [ilosc] => 1
            [cena] => 3.99
        )

    [2] => Array
        (
            [id] => 7
            [ilosc] => 1
            [cena] => 4.56
        )

)

do tej tablicy nowe dane dodaje tak:

function f_dodaj($id, $ilosc, $cena){
		$produkt = array('id'=>$id, 'ilosc'=>$ilosc, 'cena'=>$cena);
		$_SESSION['koszyk'][] = $produkt;
}

chcę zrobić aby przy użyciu funkcji f_dodaj funkcja sprawdziła czy nie istnieje juz pole o takim numerze ID jaki chcę dodać a jeżeli istnieje to zwiększyć jego ilość o zmienną ilość podaną w argumencie funkcji.

Problem w tym iż tablice w której mogą znajdować się ID, ILOSC i CENA; znajdują się w tablicach.

Jak szukać takich danych i jak się do nich odwoływać. np jak zmienić wartość ilość.

coś takiego próbowałem ale nie idzie


$_SESSION['koszyk'][1[ilosc]] = $_SESSION['koszyk'][1[ilosc]] + $ilosc;

Może ktoś naprowadzi mnie na prawidłowy tok myślenia.

1

Masz dwie opcje.
Zachowując obecną strukturę tablic możesz przeiterować się po tablicy $_SESSION['koszyk'] przed dodaniem nowego produktu i zwiększać 'ilosc' w danej tablicy jeśli został dany id znaleziony.

foreach ($_SESSION['koszyk'] as &$produktZKoszyka){
    if ($produktZKoszyka['id'] == $id)
        $produktZKoszyka['ilosc'] += $ilosc;
    else
        $_SESSION['koszyk'][] = array('ilosc' => $ilosc .............);
}
 

Wadą tego rozwiązania jest konieczność przeszukiwania całego koszyka, przy każdym dodaniu produktu.

Druga opcja (imo lepsza) to użycie tablicy asocjacyjnej. Nie wymaga ona przeszukiwania całego koszyka.
Dodawanie produktu działałoby mniej więcej tak

if (!empty($_SESSION['koszyk'][$id]){
    $_SESSION['koszyk'][$id]['ilosc'] += $ilosc;
}
else
    $_SESSION['koszyk'][$id]['ilosc'] = $ilosc;
0

Tą drugą opcje zastosowałem dziś rano i wydawała mi się całkiem dobra lecz zrezygnowałem z niej w czasie gdy musiałem zliczyć wartość koszyka. Ponieważ nie mogłem pętlą for przelecieć całej tablicy.

Drugi sposób podoba mi się bardzo i widzę dla niego zastosowanie. Tylko jak sumować wartości takiej tablicy?

OK teraz mam taką tablicę:

Array
(
    [1] => Array
        (
            [ilosc] => 1
            [cena] => 15.20
        )
 
    [8] => Array
        (
            [ilosc] => 1
            [cena] => 3.99
        )
 
    [7] => Array
        (
            [ilosc] => 1
            [cena] => 4.56
        )
 
)

lecz niestety funkcja

print(array_sum($_SESSION['koszyk']));

zwraca mi 0

EUREKA poradziłem sobie w ten o to sposób

function f_koszyk_suma_zamowienia(){
	if(isset($_SESSION['koszyk'])){
		foreach($_SESSION['koszyk'] as $klucz){
		$ilosc   = $klucz['ilosc'];
		$cena    = $klucz['cena'];
		$wartosc = $ilosc * $cena;
		$suma = $suma + $wartosc; 
	};
		return $suma;
	}
}

Pozdrawiam i dziękuje za naprowadzenie

1 użytkowników online, w tym zalogowanych: 0, gości: 1