Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Problem z referencją, podczas operacji na tablicy
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Nie wiem czy to ma znaczenie ale używam php 5.2.0. W php referencje pozwalają na stworzenie dwóch zmiennych odwołujących się do tej samej zmiennej. Podczas przeglądania tablicy funkcją foreach(), potrzebowałem nadpisywać/kasować pewne dane. Były dwa wyjścia:
1. najpierw przelecieć przez całą tablicę i do nowej tablicy przerzucić tylko te dane, które mnie interesują
2. usuwać/nadpisywać dane podczas przeglądania

Działanie poniższego kodu jest dla mnie niezrozumiałe. Czy może mi ktoś to wyjaśnić?

  1. <?php
  2. $tablica = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11');
  3. //$tablicaRef = &$tablica;
  4. foreach($tablica As $key => $element)
  5. {
  6. $tablica[1] = 'WARTOŚĆ NADPISANA';
  7. echo $key . ' => ' . $element . '<br />';
  8. }
  9. echo '<br />--------------<br />';
  10. foreach($tablica As $key => $element)
  11. {
  12. $tablica[1] = 'WARTOŚĆ NADPISANA';
  13. echo $key . ' => ' . $element . '<br />';
  14. }
  15. ?>

Dopiero przy drugim przeglądaniu tablicy znajduje się wartość nadpisana. Jeśli odkomentuję drugą linijkę to w obydwóch przebiegach pętli znajdzie się wartość nadpisana.. Pomimo tego, że stworzyłem referencję a i tak korzystam z $tablica.. (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
powoduje, że zmienna $tablicaRef wskazuje na miejsce w pamięci, gdzie znajduje się $tablica. To jest jasne. Ale dlaczego przy okazji zmienna $tablica też staje się referencją?
O rety, no przeciez przez caly czas to tlumacze...
Wczytaj sie w ten tekst z manuala:
Cytat
czyli nie $a wskazuje na $b lub odwrotnie, lecz $a oraz $b wskazują na to samo miejsce.
Tak zrobili i tak jest. Nie ma co sie nad tym rozwodzic.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 22:43