2016-04-25 14 views
5

tôi cố gắng tạo mảng bằng PHP. Kích thước của mảng là 26000 x 26000. Có thể tạo mảng lớn không? Tôi đã cố gắng làm cho một mảng với kích thước 10000 x 10000 nhưng chương trình vẫn nói với tôi điều này:Làm thế nào để tạo mảng lớn (26000 x 26000) bằng cách sử dụng PHP?

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

tôi có 8GB RAM, tôi đã thiết lập các memory_limit trong php.ini với -1 (cấu hình apache). mã để tạo mảng là:

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); 

Tôi cũng đã thử sử dụng SplFixedArray, nhưng kết quả là như nhau. Xin hãy giúp tôi, cảm ơn! :)

+5

tôi phải băn khoăn gì trường hợp sử dụng của bạn là dành cho mảng lớn như vậy. Có thể, có, mặc dù tôi hy vọng bạn sẽ cần thêm bộ nhớ trước khi dài, nhưng nó là cần thiết. –

+2

Nếu bạn đang sử dụng lập chỉ mục số thẳng và bạn biết trước kích thước của mảng của mình; tại sao không xem xét [SPLFixedArray] (http://nl3.php.net/manual/en/class.splfixedarray.php) thay vì –

+7

Tôi đã thử nghiệm từ 100,100 đến 600, 600: memoryUsage/arrayElements ≈ 200 Byte, trong trường hợp của bạn, nó sẽ cần 25000 * 25000 * 200 byte ≈ 100GB –

Trả lời

-1

Bạn có thể sử dụng đoạn mã này quá

$mon = range(1, 26000); 
    for($i=0;$i<=25999;$i++){ 
     $mon[$i] = range(1, 26000); 
    } 
Các vấn đề liên quan