Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]for na foreach
Forum PHP.pl > Forum > Przedszkole
matyskiewicz
Witam
Mam problem z przetłumaczeniem pętli for na foreach...
  1. <?php
  2. for($i = 0; $i < count($_SESSION['cart']); $i++)
  3.        {
  4.        if($_SESSION['cart'][$i]['id'] == $zamId)
  5.            unset($_SESSION['cart'][$i]);                    
  6.    }
  7. ?>

W moim rozumieniu:
  1. <?php
  2. foreach($_SESSION['cart'] as $produkt)
  3.    {
  4.          if(isset($produkt))
  5.           {
  6.            if($produkt['id'] == $zamId)
  7.                unset($produkt);        
  8.           }
  9.    }
  10. ?>

lecz funkcja unset nie usuwa wpisu z tablicy. Mogę prosić o podpowiedź, w czym leży problem?
sowiq
http://pl.php.net/manual/pl/control-structures.foreach.php:
Cytat
Informacja: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.
W wolnym tłumaczeniu: foreach działa na kopii tablicy, a nie na samej tablicy

[edit]
Zobacz też: http://pl.php.net/manual/pl/control-struct...reach.php#88578
Crozin
Czyli powinieneś skorzystać z konstrukcji:
  1. <?php
  2. froeach($array as $key => $value):
  3. ?>
Swoją drogą... ten pierwszy IF jest kompletnie niepotrzebny.
matyskiewicz
a w jaki sposób można usunąć ten wpis z tablicy (oryginalnej)? bo na for poległem: Temat: PHPTablice_a_petle
Crozin
unset" title="Zobacz w manualu PHP" target="_manual + podanie do niego konkretnego elementu tablicy
nexis
  1. <?php
  2. foreach($_SESSION['cart'] as $key => $value) {
  3.    if ($value['id'] == $zamId) {
  4.        unset($_SESSION['cart'][$key]);
  5.    }        
  6. }
  7. ?>
matyskiewicz
Oczywiście, dziękuję pomogło, ale mogę prosić o objaśnienia do tego kodu? Bo dzięki gotowcowi nie nauczę się za wiele...
nospor
Cytat
Bo dzięki gotowcowi nie nauczę się za wiele...
Nie przesadzasz troche? 3 linijki kodu nazywasz gotowcem?

1 linia - foreach - chyba wiesz do czego sluzy
2 linia - if - chyba wiesz do czego sluzy
3 linia - unset - masz opisane na przykladach w manualu.

czego tu nie rozumiesz?
matyskiewicz
  1. <?php
  2. foreach($_SESSION['cart'] as $key => $value) {
  3.   if ($value['id'] == $zamId) {
  4.       unset($_SESSION['cart'][$key]);
  5.   }        
  6. }
  7. ?>

if - rozumiem
unset - rozumiem
pętla foreach:
  1. <?php
  2. $_SESSION['cart'] as $key => $value
  3. ?>

i wykorzystanie $value
  1. <?php
  2. $value['id'] == $zamId
  3. ?>
nospor
Cytat
$_SESSION['cart'] as $key => $value
PRzeciez to jest podstawowa skladnia foreach opisana w manualu.

Cytat
$value['id'] == $zamId
PRzeciez w swoim pierwszym poscie sam to napisales, tylko ze zmienna nie nie nazywala sie value a product
if($produkt['id'] == $zamId)
matyskiewicz
Cytat(nospor @ 19.05.2009, 08:50:08 ) *
PRzeciez to jest podstawowa skladnia foreach opisana w manualu.

PRzeciez w swoim pierwszym poscie sam to napisales, tylko ze zmienna nie nie nazywala sie value a product
if($produkt['id'] == $zamId)

ok już rozumiem smile.gif
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.