Php 使用关联数组计算平均坡率

Php 使用关联数组计算平均坡率,php,Php,如果我的平均分为: $average = 95.00000000 我有一个数组: $grades = array("91-100"=>"A+","80-89"=>"A","70-79"=>"B","60-69"=>"C","50-59"=>"D","0-49"=>"F"); 当我尝试通过以下方式获得平均分数时: $grade = $grades[$average]; 我得到一个错误: 注意:未定义索引:95.00000000 我认为问题来自数组的键,但是

如果我的平均分为:

$average = 95.00000000
我有一个数组:

$grades = array("91-100"=>"A+","80-89"=>"A","70-79"=>"B","60-69"=>"C","50-59"=>"D","0-49"=>"F");
当我尝试通过以下方式获得平均分数时:

$grade = $grades[$average];
我得到一个错误:

注意:未定义索引:95.00000000


我认为问题来自数组的键,但是有没有办法实现我想要实现的目标?

您必须迭代这些键,并检查您的值是否在它们之间:

$grades = array("91-100"=>"A+","80-89"=>"A","70-79"=>"B","60-69"=>"C","50-59"=>"D","0-49"=>"F");
$average = 95.00000000 ;

$grade = '' ;
foreach ($grades as $val => $cur_grade) {
    list($min, $max) = explode('-', $val); // split key into min and max
    if ($average >= $min && $average <= $max) { // compare
        $grade = $cur_grade ; // get the value
        break ; // stop the loop
    }
}
echo $grade ;

请注意,如果您的
$average
不在范围内(例如69.9),则在任何情况下都不会匹配。所以你可以用“90-100”,“80-90”


您必须迭代这些键,并检查您的值是否在它们之间:

$grades = array("91-100"=>"A+","80-89"=>"A","70-79"=>"B","60-69"=>"C","50-59"=>"D","0-49"=>"F");
$average = 95.00000000 ;

$grade = '' ;
foreach ($grades as $val => $cur_grade) {
    list($min, $max) = explode('-', $val); // split key into min and max
    if ($average >= $min && $average <= $max) { // compare
        $grade = $cur_grade ; // get the value
        break ; // stop the loop
    }
}
echo $grade ;

请注意,如果您的
$average
不在范围内(例如69.9),则在任何情况下都不会匹配。所以你可以用“90-100”,“80-90”


我建议将grade数组更改为更简单的结构,这样您就可以得到更简单、更可预测的代码

<?php
$average = 95.00000000;
$grades = array(
    array(
        'grade' => 'A+',
        'max' => 100,
        'min' => 90
    ),
    array(
        'grade' => 'A',
        'max' => 89,
        'min' => 80
    ),
    array(
        'grade' => 'B',
        'max' => 79,
        'min' => 70
    ),
    array(
        'grade' => 'C',
        'max' => 69,
        'min' => 60
    ),
    array(
        'grade' => 'D',
        'max' => 59,
        'min' => 50
    ),
    array(
        'grade' => 'F',
        'max' => 49,
        'min' => 0
    ),
);

$result = null;
$averageScore = (int) floor($average); // it's better to compare int to int instead of float to int
foreach($grades as $grade) {
    if ($average < $grade['max'] && $average >= $grade['min']) {
        $result = $grade['grade'];
        break;
    }
}
if ($result !== null) {
    echo 'Your grade is: ' . $result;
} else {
    echo 'Grading error, please ask your professor for details!';
}

我建议将grade数组更改为更简单的结构,这样您就可以得到更简单、更可预测的代码

<?php
$average = 95.00000000;
$grades = array(
    array(
        'grade' => 'A+',
        'max' => 100,
        'min' => 90
    ),
    array(
        'grade' => 'A',
        'max' => 89,
        'min' => 80
    ),
    array(
        'grade' => 'B',
        'max' => 79,
        'min' => 70
    ),
    array(
        'grade' => 'C',
        'max' => 69,
        'min' => 60
    ),
    array(
        'grade' => 'D',
        'max' => 59,
        'min' => 50
    ),
    array(
        'grade' => 'F',
        'max' => 49,
        'min' => 0
    ),
);

$result = null;
$averageScore = (int) floor($average); // it's better to compare int to int instead of float to int
foreach($grades as $grade) {
    if ($average < $grade['max'] && $average >= $grade['min']) {
        $result = $grade['grade'];
        break;
    }
}
if ($result !== null) {
    echo 'Your grade is: ' . $result;
} else {
    echo 'Grading error, please ask your professor for details!';
}

请阅读有关数组的索引方式。然后遍历关联数组。您有字符串作为键。您正试图使用超出范围的数字非整数进行查询。请阅读有关数组索引方式的信息。然后遍历关联数组。您有字符串作为键。您正试图使用超出范围的数字非整数查询它。谢谢您的帮助:)谢谢您的帮助:)
<?php
$average = 95.00000000;
$grades = array(
    array(
        'grade' => 'A+',
        'max' => 100,
        'min' => 90
    ),
    array(
        'grade' => 'A',
        'max' => 89,
        'min' => 80
    ),
    array(
        'grade' => 'B',
        'max' => 79,
        'min' => 70
    ),
    array(
        'grade' => 'C',
        'max' => 69,
        'min' => 60
    ),
    array(
        'grade' => 'D',
        'max' => 59,
        'min' => 50
    ),
    array(
        'grade' => 'F',
        'max' => 49,
        'min' => 0
    ),
);

$result = null;
$averageScore = (int) floor($average); // it's better to compare int to int instead of float to int
foreach($grades as $grade) {
    if ($average < $grade['max'] && $average >= $grade['min']) {
        $result = $grade['grade'];
        break;
    }
}
if ($result !== null) {
    echo 'Your grade is: ' . $result;
} else {
    echo 'Grading error, please ask your professor for details!';
}