2016-04-25 48 views
5

Próbuję utworzyć tablicę z PHP. Wymiar tablicy to 26000 x 26000. Czy jest możliwe, aby tablica była tak duża? I już starać się tablicę o wymiarach 10000 x 10000 ale program ciągle mi o tym mówisz:Jak zrobić dużą tablicę (26000 x 26000) używając PHP?

Fatal error: Out of memory (allocated 1886388224) (tried to allocate 24 bytes) in C:\xampp\htdocs\matrix\index.php on line 24

mam 8GB RAM, już ustawić memory_limit w php.ini z -1 (konfiguracja apache). kod do zbudowania tablicy jest następujący:

function zeros($rowCount, $colCount) 
{ 
    $matrix = array(); 
    for ($rowIndx=0; $rowIndx<$rowCount; $rowIndx++) 
    { 
     $matrix[] = array(); 
     for($colIndx=0; $colIndx<$colCount; $colIndx++) 
     { 
      $matrix[$rowIndx][$colIndx]=0; 
     } 
     var_dump(memory_get_usage()); 
    } 
    return $matrix; 
} 

$matrix = zeros(25000,25000); 

Próbuję już używać SplFixedArray, ale wynik jest taki sam. Proszę, pomóżcie mi, dzięki! :)

+5

muszę się zastanawiać, co twój przypadek użycia jest dla takich dużych tablic. Czy to możliwe, tak, choć przypuszczam, że będziesz potrzebował więcej pamięci, ale jest to konieczne. –

+2

Jeśli korzystasz z bezpośredniego indeksowania numerycznego i znasz wcześniej wymiary swojej macierzy; dlaczego nie rozważyć [SPLFixedArray] (http://nl3.php.net/manual/en/class.splfixedarray.php) zamiast –

+7

Przetestowałem od 100, 100 do 600, 600: memoryUsage/arrayElements ≈ 200 Bytes, więc w twoim przypadku byłoby to potrzebujesz 25000 * 25000 * 200 Bytes ≈ 100GB –

Odpowiedz

-1

Można użyć tego fragmentu kodu zbyt

$mon = range(1, 26000); 
    for($i=0;$i<=25999;$i++){ 
     $mon[$i] = range(1, 26000); 
    }