Каждый if
проверяет значение после того, как предыдущее, возможно, уже изменило значение.
Когда $k
равен 90, первый if
завершается успешно, что меняет его на 4.0
.
Второй if
завершается неудачно, поскольку 4.0
не находится между 80
и 90
.
Третий if
завершается успешно, поскольку 4.0
меньше 79
,поэтому он меняет его на 2.8
.
. Вы должны использовать elseif
, чтобы он выполнял тесты только в случае неудачи предыдущего, а затем всегда будет проверять исходное значение $k
.Вы также можете использовать else
для последнего случая.
array_walk_recursive($mark, function (&$k) {
if($k>=90) {
$k='4.0';
}
elseif($k>=80 AND $k<90) {
$k='3.6';
}
elseif($k<79) {
$k='2.8';
}
});
Кстати, вы, вероятно, хотели использовать < 80
для последнего теста или просто else
без теста.Если $k
равно 79
, вы не будете его обновлять.