我尝试执行下面的代码,当我在终端中加载文件时,我继续收到阅读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);
答案 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);