Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z uporządkowaniem tablicy
Forum PHP.pl > Forum > PHP
MitS
Witam serdecznie,

mam sobie taki wycinek kodu:
  1. function myFun(){
  2. if (!empty($_POST))
  3. {
  4. $id = $_POST['id'];
  5. $cena = $_POST['cena'];
  6. $ilosc = $_POST['ilosc'];
  7.  
  8. $_SESSION['cart'][] = array(){
  9. 'id' => $id,
  10. 'ilosc' => $ilosc,
  11. 'cena' => $cena
  12. }
  13. }
  14. }


Funkcja jest wywoływana każdorazowo ajax'em kiedy klikniemy pewien button i wtedy wysyła się post a następnie tworzy się tablica sesyjna, która w rezultacie wygląda mniej więcej tak (po wykonaniu kodu):

  1. [0] => array(
  2. 'id' => 1,
  3. 'ilosc' => 23,
  4. 'cena' => 23.21
  5. ),
  6. [1] => array(
  7. 'id' => 2,
  8. 'ilosc' => 2,
  9. 'cena' => 12.21
  10. ),
  11. [2] => array(
  12. 'id' => 3,
  13. 'ilosc' => 1,
  14. 'cena' => 7.21
  15. ),
  16. [4] => array(
  17. 'id' => 1,
  18. 'ilosc' => 1,
  19. 'cena' => 3.00
  20. ),
  21. [5] => array(
  22. 'id' => 1,
  23. 'ilosc' => 10,
  24. 'cena' => 30.00
  25. )
  26. )


mój problem polega na uporządkowaniu tablicy $_SESSION['cart'] w taki sposób by elementy, które są nowo dodawane były sprawdzane z tym co już jest - jeżeli jest pod tablica o takim samym id i ilości to nic się nie dzieje, jeżeli jest takie same id ale różna ilość to aktualizuje się obecny wpis o ilość, jeżeli nie ma danego id to dodaje nową pod tablicę do obecnej tablicy.

Czyli chcę uzyskać taki rezultat:
  1. [0] => array(
  2. 'id' => 1,
  3. 'ilosc' => 10,
  4. 'cena' => 30.00
  5. ),
  6. [1] => array(
  7. 'id' => 2,
  8. 'ilosc' => 2,
  9. 'cena' => 12.21
  10. ),
  11. [2] => array(
  12. 'id' => 3,
  13. 'ilosc' => 1,
  14. 'cena' => 7.21
  15. )
  16. )



Próbowałem zrobić coś takiego:
  1. function myFun2(){
  2. $newArray = array();
  3. $newArray = $_SESSION['cart'];
  4.  
  5. for ($i=0, $c=count($newArray); $i<$c; $i++){
  6. if ($newArray[$i]['id'] == $id){
  7. if($newArray[$i]['ilosc'] != $ilosc){
  8. $newArray[$i]['ilosc'] = $ilosc;
  9. }
  10. }
  11. else{
  12. $newArray[] = array(
  13. 'id' => $id,
  14. 'ilosc' => $ilosc,
  15. 'cena' => $cena
  16. );
  17. }
  18. }
  19.  
  20. return $newArray;
  21. }


ale niestety niezbyt działa gdyż pierwsze kilka wartości poprawnie działają zaś jak się da więcej do wartości się duplikują a nie nadpisują :/
Macie jakiś pomysł ?
maly_swd
  1. function myFun(){
  2. if (!empty($_POST))
  3. {
  4. $id = $_POST['id'];
  5. $cena = $_POST['cena'];
  6. $ilosc = $_POST['ilosc'];
  7.  
  8. $_SESSION['cart'][$id]=$id;
  9. $_SESSION['cart'][$id]['ilosc']+=$ilosc;
  10. $_SESSION['cart'][$id]['cena']=$cena;
  11.  
  12. }
  13. }

a pozniej jak chcesz to wyswietlic to foreachem winksmiley.jpg
MitS
Średnio rozwiązuje to mój problem :/
skowron-line
Jeżeli mogę zaproponować to zamień tablice w taki sposób aby kluczem było ID bo wnioskuje że to wartość unikalna albo przynajmniej powinna być.
Później proste http://pl.php.net/manual/en/function.array-key-exists.php i warunek IF.
  1. if( $tablica[ $klucz ][ 'ilosc' ] > $moja_wartosc )
  2. {
  3. // dodawanie
  4. }

A jeżeli http://pl.php.net/manual/en/function.array-key-exists.php nie znajdzie klucza to aktualizujesz całą tablicę.
MitS
Rewelacja o to mi chodziło smile.gif
dzięki.
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.