Próbuję utworzyć tablicę 2D w PHP o rozmiarze 2000x2000 (4 miliony wpisów). Wygląda na to, że zabrakło mi tu pamięci, ale sposób, w jaki pojawia się błąd, jest mylący.Błąd pamięci PHP z dużą tablicą
Po zdefiniowaniu tablicy i wypełnieniu jej początkowo za pomocą komendy array_fill i zainicjowaniu każdej pozycji w tablicy (macierzy) za pomocą 0 nie ma problemu.
Jednak jeśli spróbuję iterować po tablicy i wypełnić każdą pozycję wartością 0, zabraknie jej pamięci.
Założę się, że po uruchomieniu array_fill przydzieli pamięć w tym miejscu i nie powinno zabraknąć pamięci w pętli.
Oczywiście jest to tylko uproszczona wersja kodu. W mojej aktualnej aplikacji będę używał współrzędnych Y X &, aby sprawdzić wartość z innej tabeli, przetworzyć ją, a następnie zapisać w mojej macierzy. Będą to wartości zmiennoprzecinkowe.
Czy ktoś może pomóc w tym świetle? Czy jest jakiś inny sposób, w jaki powinienem to robić?
Dziękujemy!
<?php
// Set error reporting.
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
// Define Matrix dimensions.
define("MATRIX_WIDTH", 2000+1);
define("MATRIX_HEIGHT", 2000+1);
// Setup array for matrix and initialize it.
$matrix = array_fill(0,MATRIX_HEIGHT,array_fill(0,MATRIX_WIDTH,0));
// Populate each matrix point with calculated value.
for($y_cood=0;$y_cood<MATRIX_HEIGHT;$y_cood++) {
// Debugging statement to see where the script stops running.
if(($y_cood % 100) == 0) {print("Y=$y_cood<br>"); flush();}
for($x_cood=0;$x_cood<MATRIX_WIDTH;$x_cood++) {
$fill_value = 0;
$matrix[$y_cood][$x_cood]=$fill_value;
}
}
print("Matrix width: ".count($matrix)."<br>");
print("Matrix height: ".count($matrix[0])."<br>");
?>
Spróbuj zwiększyć rozmiar pamięci PHP 'memory_limit = 128M; Maksymalna ilość pamięci, którą może zużyć skrypt (128 MB) '. Osobiście nie radzę uwierzyć w wyniki spowodowane niestabilnym zachowaniem skryptu. –
Dzięki. Czy to w końcu. –