Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] foreach a działanie bezpośrednio na tablicy
Forum PHP.pl > Forum > Przedszkole
no-scared
Mam kolejne pytanie ^^

Jak wiadomo foreach działa na kopii tablicy, a ja chcę aby ona działała na tablicy a nie tworzyła jej kopię, taki schemat:

  1. <?php
  2. foreach(&$array as $key => $val)
  3. {
  4. // ...
  5. }
  6. ?>


Kończy się niestety błędem. Jak tu działać?
nospor
Cytat
Jak wiadomo foreach działa na kopii tablicy
A w której czesci wszechswiata tak mowia? winksmiley.jpg

  1. <?php
  2. foreach($array as $key => &$val){
  3. //teraz zmieniajac $val, zmieniac bedziesz wartosc w tej tablicy
  4. }
  5. ?>
wookieb
Nie da się tak zrobić.
  1. <?php
  2. foreach($array as $key => &$val)
  3. {
  4. //mozesdz modyfikowac $val a usuwania elementow z tablicy odbywa sie przez
  5. unset($array[$key]);
  6. }
  7. ?>
no-scared
Dzięki za odpowiedzi.

Wiem o takich sytuacjach, jednak chodzi mi o trochę inną rzecz, przedstawię ją za pomocą kodu:

  1. <?php
  2.  
  3. $arr = array('a', 'b', 'c');
  4.  
  5. $i = 1;
  6.  
  7. foreach($arr as &$val)
  8. {
  9. echo $i;
  10.  
  11. if(isset($arr[2]))
  12. {
  13. unset($arr[2]);
  14. }
  15.  
  16. $i++;
  17. }
  18.  
  19. print_r($arr);
  20.  
  21. ?>


I teraz tablica bedzie miala dwa elementy... ale wyświetli sie 123, czyli wykona się 3 razy, a ja chce zrobic tak, że jak już usunę tę wartość z tablicy to foreach na niej nie operuje.
sowiq
Cytat(nospor @ 22.05.2009, 21:06:31 ) *
A w której czesci wszechswiata tak mowia? winksmiley.jpg
Ta część świata nazywa się manual:
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.
Ale w tym akurat przypadku the array is referenced winksmiley.jpg
no-scared
@sowiq, mam rozumiec, ze jak daje referencje do $val, to rowniez cala tablica jest "referowana" tongue.gif?

Cytat
Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in [ciach] on line 174


Czy to że zainstalowana u mnie wersja php jest 4.4.7 ma z tym bezpośredni związek, że nie mogę dać &$val?
nospor
Cytat
I teraz tablica bedzie miala dwa elementy... ale wyświetli sie 123, czyli wykona się 3 razy, a ja chce zrobic tak, że jak już usunę tę wartość z tablicy to foreach na niej nie operuje.
Mi ten kod dziala tak jak chcesz, czyli wyswietla 12. php5
no-scared
Czyli musze jakos wykombinowac jak tu wlaczyc php5 (lap.pl), jak zadziala to porozdaje plusy, ale pki co jeszcze prosze o nie zamykanie tematu, bo moge o cos dalej pytac w zwiazku z problemem

Bo mi na moim domowym komputerze z PHP5 tez dziala dobrze, a na lap.pl z PHP4 juz nie, widac referencja do $val dziala dopiero od PHP5
nospor
Cytat
Czyli musze jakos wykombinowac jak tu wlaczyc php5 (lap.pl)

No ale czytaj co oni mają na stronie....
Cytat
obsługa języka PHP 4/5
każde konto na naszym serwerze posiada obsługę języka PHP w wersji 4 i 5. W praktyce obsługa dwóch wersji PHP wygląda bardzo prosto. Każde pliki z rozszerzeniem .php5 są traktowane jako PHP5, a .php jako PHP4.
no-scared
Dzięki. A żeby nie zakładać nowego tematu... jak to jest z include() ? Jeśli includuje plik php5 plikiem php4 to ten includowany plik bedzie interpretowany php4 czy php5?
kkuba
Możesz includować sobie nawet plik .txt z kodem php (i zostanie on wykonany), więc sam dojdź do tego ; )
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.