我正在尝试用特定条件替换array
值。
假设数组$mark
具有以下值
$mark = array(90,85);
只是正常的检查值,它正在回显正确的值
array_walk_recursive($mark, function (&$k) {
if($k==90){$k='4.0';}
if($k==85){$k='3.6';}
});
print_r($mark);
输出为
Array ( [0] => 4.0 [1] => 3.6 )
但是,在应用大于或小于等条件时,它会返回错误的值。
array_walk_recursive($mark, function (&$k) {
if($k>=90){$k='4.0';}
if($k>=80 AND $k<90){$k='3.6';}
if($k<79){$k='2.8';}
});
print_r($mark);
输出是
Array ( [0] => 2.8 [1] => 2.8 )
每个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
时,您将不会更新它。
您必须在if
中使用else
<?php
$mark = array(90,85);
array_walk_recursive($mark, function (&$k) {
if ($k >= 90) {
$k = '4.0';
} else if ($k >= 80 && $k<90) {
$k = '3.6';
} else if ($k < 80) {
$k = '2.8';
}
});
print_r($mark);
在 3v4l 上看到它的实际效果
检查函数中的每个if
,使其在代码中出现的顺序:
// $k is 90
if($k>=90){$k='4.0';}
// $k is 4
if($k>=80 AND $k<90){$k='3.6';}
// $k is still 4
if($k<79){$k='2.8';}
// $k is 2.8
请改用if-elseif-else
:
if ($k>=90) {
$k='4.0';
} elseif ($k>=80 AND $k<90){
$k='3.6';
} else {
$k='2.8';
}