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);
我想弄清楚文件处理是如何工作的,线程说:
您的任务是编写一个 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);