Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablice a pętle
Forum PHP.pl > Forum > Przedszkole
matyskiewicz
Witam
Mam tablicę $_SESSION['cart']:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [id] => 6
  6. [ilosc] => 12
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [id] => 23
  12. [ilosc] => 23
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [id] => 28
  18. [ilosc] => 23
  19. )
  20.  
  21. )


Przepisuje ją do $zam[$i]:
  1. <?php
  2. for($i = 0; $i < count($_SESSION['cart']); $i++)
  3.        {
  4.            if(isset($_SESSION['cart'][$i]['id']))
  5.            {
  6.                $row = $db -> dbSelect("SELECT * FROM `Products` WHERE id = ".$_SESSION['cart'][$i]['id']);    
  7.                $zam[$i]['lp'] = $i+1;
  8.                $zam[$i]['id'] = $_SESSION['cart'][$i]['id']; //sesja
  9.                $zam[$i]['ean'] = $row[0]['ean']; //baza danych            
  10.                $zam[$i]['name'] = $row[0]['name']; //baza danych
  11.                $zam[$i]['ilosc'] = $_SESSION['cart'][$i]['ilosc']; //sesja
  12.                $zam[$i]['price'] = $row[0]['price']; //baza danych
  13.                $zam[$i]['price2'] = $row[0]['price'] * 1.22; //baza danych
  14.                $zam[$i]['priceIlosc'] = $row[0]['price'] * $_SESSION['cart'][$i]['ilosc']; //baza i sesja
  15.                $zam[$i]['priceIlosc2'] = $row[0]['price'] *$_SESSION['cart'][$i]['ilosc'] * 1.22; //baza i sesja
  16.            }
  17.  
  18.        }
  19. ?>

następnie $zam[$i] przekazuje do SMARTY i wyświetlam.
Operacja funkcjonuje poprawnie do momentu usunięcia powiedzmy środkowego elementu (nieostatniego):
$_SESSION['cart']:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [id] => 6
  6. [ilosc] => 12
  7. )
  8.  
  9. [2] => Array
  10. (
  11. [id] => 28
  12. [ilosc] => 23
  13. )
  14.  
  15. )

W tej sytuacji wyświetla się się tylko [0] natomiast [2] istnieje w tablicy ale się nie wyświetla.
W jaki sposób mogę rozwiązać ten problem?

Zapewne wykorzystanie foreach jest bardziej optymalne lecz niestety nie umiem przekształcić mego kodu na tą pętlę.
porady-it.pl
Przekształcenie jest bardzo proste i taka pętla będzie wyglądała następująco:

  1. <?php
  2. foreach($_SESSION['cart'] as $produkt)
  3.       {
  4.           if(isset($produkt['id']))
  5.           {
  6.               $row = $db -> dbSelect("SELECT * FROM `Products` WHERE id = ".$produkt['id']);    
  7.               $zam[$i]['lp'] = $i+1;
  8.               $zam[$i]['id'] = $produkt['id']; //sesja
  9.               $zam[$i]['ean'] = $row[0]['ean']; //baza danych            
  10.               $zam[$i]['name'] = $row[0]['name']; //baza danych
  11.               $zam[$i]['ilosc'] = $produkt['ilosc']; //sesja
  12.               $zam[$i]['price'] = $row[0]['price']; //baza danych
  13.               $zam[$i]['price2'] = $row[0]['price'] * 1.22; //baza danych
  14.               $zam[$i]['priceIlosc'] = $row[0]['price'] * $produkt['ilosc']; //baza i sesja
  15.               $zam[$i]['priceIlosc2'] = $row[0]['price'] *$produkt['ilosc'] * 1.22; //baza i sesja
  16.           }
  17.  
  18.       }
  19. ?>


Proponuje zapoznać się bardzo dokładnie z tą pętlą gdyż jest ona bardzo przydatna w operacjach na tablicach.
matyskiewicz
Ok, zapomnieliśmy jeszcze o liczniku


  1. $i=0;
  2. <?php
  3. foreach($_SESSION['cart'] as $produkt)
  4.      {
  5.          if(isset($produkt['id']))
  6.          {
  7.              $i++;
  8.              $row = $db -> dbSelect("SELECT * FROM `Products` WHERE id = ".$produkt['id']);    
  9.              $zam[$i]['lp'] = $i+1;
  10.              $zam[$i]['id'] = $produkt['id']; //sesja
  11.              $zam[$i]['ean'] = $row[0]['ean']; //baza danych            
  12.              $zam[$i]['name'] = $row[0]['name']; //baza danych
  13.              $zam[$i]['ilosc'] = $produkt['ilosc']; //sesja
  14.              $zam[$i]['price'] = $row[0]['price']; //baza danych
  15.              $zam[$i]['price2'] = $row[0]['price'] * 1.22; //baza danych
  16.              $zam[$i]['priceIlosc'] = $row[0]['price'] * $produkt['ilosc']; //baza i sesja
  17.              $zam[$i]['priceIlosc2'] = $row[0]['price'] *$produkt['ilosc'] * 1.22; //baza i sesja
  18.          }
  19.  
  20.      }
  21. ?>
porady-it.pl
Jasne zadziała tylko po co dodatkowa zmienna jak można zrobić to tak:

  1. <?php
  2. foreach($_SESSION['cart'] as $produkt)
  3.     {
  4.         if(isset($produkt['id']))
  5.         {
  6.             $row = $db -> dbSelect("SELECT * FROM `Products` WHERE id = ".$produkt['id']);    
  7.             $zam[] = array('id'          => $produkt['id'],
  8.                            'ean'         => $row[0]['ean'],
  9.                            'name'        => $row[0]['name'],
  10.                            'ilosc'       => $produkt['ilosc'],
  11.                            'price'       => $row[0]['price'],
  12.                            'price2'      => $row[0]['price'] * 1.22,
  13.                            'priceIlosc'  => $row[0]['price'] * $produkt['ilosc'],
  14.                            'priceIlosc2' => $row[0]['price'] * $produkt['ilosc'] * 1.22);
  15.         }
  16.  
  17.     }
  18. ?>


Zaś lp. którą wpisywałeś jako element tablicy nie jest potrzebna bowiem pętla foreach w smarty a także w php udostępnia dostęp do klucza który może śmiało posłużyć jako lp.
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.