PHP 文件处理读写

PHP file handling read and write

我想弄清楚文件处理是如何工作的,线程说:

您的任务是编写一个 PHP 脚本,该脚本 从文件“grades.txt” 中读取成绩,提高所有他们一个,将提高的成绩写入文件“results.txt”,最后从文件“results.txt[打印提高的成绩=28=]”。 如果等级为 5,则不会提高。在 grades.txt 中,每个等级都在自己的一行中,等级的数量可能会有所不同。每个等级是0-5。 成绩也必须单独写到 results.txt

<?php   

function raise($n){
    if ($n == 5 ){
        return 5 ;
    }else{
        return $n + 1 . "\n";
    }
}

$start= 'grades.txt';
$read_start=file($start);
$open_start=fopen($start,'w');


$end = 'results.txt';
$open_end=fopen($end,'w');


foreach($read_start as $key){
    fwrite($open_start,raise($key));
    
}

echo "New grades: ". "\n";
foreach($read_start as $value){ 
    fwrite($open_end, $value);
    echo $value;
}

?>

预期的输出应该是,所有提高的成绩应该写入results.txt:

New grades:   
1
5
2
4
3
5

但是我的代码给了我这个:

1
2
4
3
5
New grades: 
0
5
1
3
2
4

因为在输出成绩的 foreach 中,您仍然使用 $read_start 什么是没有更新的旧文件。 这个foreach

foreach($read_start as $key){
    fwrite($open_start,raise($key));
    
}

应该替换为将新成绩插入新文件而不是旧文件。 像这样

foreach($read_start as $key){
    fwrite($open_end,raise($key));
    
}

最后一个 foreach 应该使用新文件

file() 将文件读入数组,因此您需要考虑 key(在 foreach ($grades as $key => $grade) { 中)。您还应该确保您获得的值实际上是整数 ($grade = (int) $grade;)。然后遍历成绩和 write/output 相应的新成绩:

<?php

$grades = file("grades.txt");
$results = fopen("results.txt", "w");
// print_r($grades);

foreach ($grades as $key => $grade) {
    $grade = (int) $grade;
    if($grade != 5) {
        $raisedGrade = $grade + 1;
        // echo "raising $grade to $raisedGrade\n";
    } else {
        $raisedGrade = $grade;
        // echo "NOT raising $grade\n";
    }
    fwrite($results, $raisedGrade  . "\n");
    echo $raisedGrade . "\n";
}
fclose($results);