从.txt文件读取和写入大数组

时间:2014-08-13 21:28:40

标签: php arrays

我尝试执行下面的代码,当我在终端中加载文件时,我继续收到阅读killed的消息。我知道我使用了大量内存,所以我将内存限制设置为apache允许的最大数量。我有一个名为codes.txt的文本文件,其中包含0到1000000之间的数字列表。我需要随机化这些数字的出现,然后将它们的新顺序写入新的文本文件。然后,我需要将它们的新出现存储在一个数组中。

ini_set('memory_limit', '2048M');

// Get all of the values from the .txt file 
// and store them in an array
$file = fopen("codes.txt", "r");
$codes = array();

while(!feof($file)) {
    $codes[] = trim(fgets($file));
}

fclose($file);

// Randomize the elements in the array
shuffle($codes);

// Write each element in the shuffled array to a new .txt file
$new_file = fopen("new_codes.txt", "w");

for($i=0;$i<1000000;$i++) {
      fwrite($new_file, $codes[$i].PHP_EOL);
}

fclose($new_file);

// Put all of the new elements into a new array
$new_file = fopen("new_codes.txt", "r");
$code = array();

while(!feof($new_file)) {
    $code[] = trim(fgets($new_file));
}

print_r($code);

1 个答案:

答案 0 :(得分:0)

不要担心新阵列,$ code已经拥有它们。如果你需要关闭,重新打开文件并将它们读入一个新数组,内存就是问题,然后在打开文件之前先使用unset($codes)终止旧数组。

ini_set('memory_limit', '2048M');

// Get all of the values from the .txt file
// and store them in an array
$file = fopen("codes.txt", "r");
$codes = array();

while (!feof($file)) {
    $codes[] = trim(fgets($file));
}

fclose($file);

// Randomize the elements in the array
shuffle($codes);

// Write each element in the shuffled array to a new .txt file
$new_file = fopen("new_codes.txt", "w");
foreach($codes as $k => $v){
    fwrite($new_file, $v.PHP_EOL);
}

fclose($new_file);