我試圖弄清楚檔案處理是如何作業的,執行緒說:
您的任務是撰寫一個 PHP 腳本,該腳本從檔案“grades.txt”中讀取成績,將所有成績加一,將提高的成績寫入檔案“results.txt”,最后從檔案中列印出提高的成績“結果.txt ”。如果等級為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
uj5u.com熱心網友回復:
file()將檔案讀入陣列,因此您需要key考慮 (in foreach ($grades as $key => $grade) {)。您還應該確保您獲得的值實際上是整數 ( $grade = (int) $grade;)。然后遍歷成績并相應地寫入/輸出新成績:
<?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);
uj5u.com熱心網友回復:
因為在輸出成績的 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 應該使用新檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340810.html
