我实际上让这段代码运行得很好,但我做了一些事情,通过使用数组键使它看起来更干净和简洁。你可以看到我的第一个看起来是如何看起来像是$classes[$i+3]
等等。它工作得很好,但我想让它更具可读性,一目了然。
这是错误消息:
注意:未定义的索引:第127行的C:\ xampp \ htdocs \ CreateaTranscript.php中的A (“A”是“$ grade_conversion”数组中的一个键,它与计算用户GPA的十进制值有关。)
这是我用来实际工作的代码行:
$grade_points += $grade_conversion[$classes[$i+3]] * $classes[$i+2];
这是导致错误的代码行:
$grade_points += $grade_conversion[$course[$i]['grade']] * $course[$i]['credit_hours'];
我尝试将多维数组包含在内。但是,它只会创建一个阻止脚本运行的不同错误。我知道基本问题是编译器看到一个未包含在s中的数组键。但是,为什么它适用于普通数组而不是多维数组?
$grade_conversion=array(
'A' => 4,
'A-' => 3.7,
'B+' => 3.3,
'B' => 3.0,
'B-' => 2.7,
'C+' => 2.3,
'C' => 2.0,
'C-' => 1.7,
'D+' => 1.3,
'D' => 1,
'D+' => 0.7,
'F' => 0,
);
我试图保持这种简洁。是否可以按照我声明的方式使用索引?在我将其切换到多维数组之前,它工作正常。我将添加该行来自的for语句示例:
for($i = 0;$i < count($course);$i++){
print "<tr bgcolor = 'F8F8F8'><td>" . $course[$i]['course_id'] . "<td>" . $course[$i]['course_name'] . "</td><td>" . $course[$i]['credit_hours'] . "</td><td>" . $course[$i]['grade'] . "</td></tr>";
//Keep a running count of credit hours for the GPA equation.
//Keep a running total of grade points using the $grade_conversion array
$total_credit_hours += $course[$i]['credit_hours'];
$grade_points += $grade_conversion[$course[$i]['grade']] * $course[$i]['credit_hours'];
}
$ course数组是通过从文件中读取数据来创建的。
以下是如何创建$ course数组。数据逐行从数据文件中提取。
$fh=fopen($file, "r");
$j = 0;
while (!feof($fh)){
$course[$j]['course_id'] = fgets($fh);
$course[$j]['course_name'] = fgets($fh);
$course[$j]['credit_hours'] = fgets($fh);
$course[$j]['grade'] = fgets($fh);
$j++;
}
fclose($fh);
答案 0 :(得分:2)
正如我在上面的评论中所提到的,由于fgets
,您的值将包含一些空格字符。当您将它们存储在trim()
数组中或将它们用作$course
的索引时,您需要$grade_conversions
这些。
您还可以避免在填充数组时手动指定数组索引,例如
while (!feof($fh)){
$course[] = [
'course_id' => trim(fgets($fh)),
'course_name' => trim(fgets($fh)),
'credit_hours' => trim(fgets($fh)),
'grade' => trim(fgets($fh))
];
}
并迭代它
foreach ($course as $courseItem) {
$total_credit_hours += $courseItem['credit_hours'];
// etc
}
最后,我认为任何结构化文本格式(JSON,XML,CSV)都会比没有键控的换行符分隔值更好,例如
// file.json
[{
"id": 1,
"name": "Foo",
"credit_hours": 2,
"grade": "A"
},
{
"id": 2,
"name": "Bar",
"credit_hours": 14,
"grade": "B"
}]
并加载它......
$courses = json_decode(file_get_contents('file.json'), true);