Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Czyszczenie pamięci po wykonanej operacji na tablicy?
Forum PHP.pl > Forum > PHP
kukix
Witam.

Zastanawiam się nad jedną rzeczą, co robicie z tablicą po wykonaniu na niej operacji?

Mam tablice w postaci:
  1. <?php
  2. $param_value[9][127] = 'AAAAA';
  3. $param_value[9][128] = 'BBBBB';
  4. $param_value[9][129] = 'CCCCC';
  5. //.. itd x 4000 pozycji
  6. ?>


nastepnie odczytuje ta tablice poprzez:
  1. <?php
  2. if (is_array($param_value[9])) {
  3.    reset(@$param_value[9]);
  4.    while (list($id,$value) = each($param_value[9])) {
  5.      print($id.' '.$value);
  6.    }
  7.  }
  8. //uzywam while(), ponieważ foreach() tworzy kopie tablicy w pamieci serwera
  9. ?>


I co teraz? Czy nie powinno się po zastosowanej pętli wyczyścić pamięci serwera z tej talicy?

Podłączyłem do skryptu plik z tą tablicą i pokazał mi się komunikat:
Cytat
Fatal error: Out of memory (allocated 77070336) (tried to allocate 40 bytes) in /index.php on line 428


Czy serwer ma zapchaną pamieć przez poprzednie wykonania tego skryptu?

Prosze o pomoc.
Będe wdzięczny za wszelkie wypowiedzi.
lashus
Wątpię by to pomogło, aczkolwiek możesz spróbować:

Kod
$param_value = array();
marcio
Hmm sprobuj uzyc unset() na wszystkie elementy tablicy oczywiscie po poprzednich operacjach na nich.
#luq
Tablicę się kasuje stosując unset na całej tablicy, a nie ma poszczególnych elementach.

  1. <?php
  2. $arr = array(
  3.    'a' => 'foo', 'b' => 'bar'
  4. );
  5. unset( $arr );
  6. ?>
okitoki
no cóż jak ci się już znudzi tablica zawsze możesz zrobić to tak
Kod
<?php
$arr = array(
    'a' => 'foo', 'b' => 'bar'
);
$arr = array();
?>
marcio
Cytat
Tablicę się kasuje stosując unset na całej tablicy, a nie ma poszczególnych elementach.

Co ty za glupoty piszesz?Mozna usuwac poszczegolny elemnty tablicy za pomoca jego index'u.

P.S a jak usuwasz dana zmienna sesyjna?

P.S2 http://it2.php.net/unset 1 exaple.
#luq
Cytat(marcio @ 28.04.2009, 11:09:05 ) *
Co ty za glupoty piszesz?Mozna usuwac poszczegolny elemnty tablicy za pomoca jego index'u.

Źle mnie zrozumiałeś. Chyba oczywistym jest że można lecieć unsetem po każdym indeksi/kluczu ale jeśli chce się skasować CAŁĄ tablicę to chyba lepiej użyć unset( $array ). Chyba się zgodzisz ze mną, że takie rozwiązanie jest lepsze.
Może trochę źle się wyraziłem ale pomyśleć też można.
bim2
#luq, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.
  1. <?php
  2. if (is_array($param_value[9])) {
  3.   foreach($param_value[9] AS $k => $v) {
  4.     list($id,$value) = $v;
  5.     print($id.' '.$value);
  6.     unset($param_value[9][$k]);
  7.   }
  8. }
  9. ?>
#luq
Cytat(bim2 @ 28.04.2009, 16:18:52 ) *
#lug, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.

A to przepraszam, mój błąd wstydnis.gif

PS. luq
okitoki
Cytat(bim2 @ 28.04.2009, 16:18:52 ) *
#luq, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.


smile.gif jak sprawdzić ile mamy jeszcze pamięci na skrypt, mówiąc szczerze w PHP jeszcze z tym nie miałem problemu, w innych językach to norma, przy zmiennych dynamicznych i OOP
Crozin
Ilość dostępnej pamięci (dostępne w php.ini) minus aktualnie zużywana memory_get_usage" title="Zobacz w manualu PHP" target="_manual
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.