大于或小于 array_walk 递归
Greater than or Smaller than within array_walk recursive
我正在尝试用特定条件替换 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 )
但是在应用大于或小于等条件时,它 returns 错误的值。
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 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';
}
您必须在 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
为 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
时,您将不会更新它。
我正在尝试用特定条件替换 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 )
但是在应用大于或小于等条件时,它 returns 错误的值。
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 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';
}
您必须在 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
为 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
时,您将不会更新它。