我正在尝试将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 )
答案 0 :(得分:3)
在每个if
可能已经更改了值之后,每个$k
都在测试该值。
当if
为90时,第一个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
恰好是$options = Option::all()
return response()
->json($options)
时,您将不会对其进行更新。
答案 1 :(得分:2)
对函数中的每个If Form1.InvokeRequired Then
Form1.Invoke(Sub()
Form1.LoadData()
End Sub)
Form1.Show()
Else
Form1.Show() : Form1.LoadData()
End If
都进行检查,以使其出现在代码中:
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
答案 2 :(得分:2)
您必须在else
中使用if
<?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上的实际操作