大于或小于array_walk内递归

时间:2019-02-06 10:51:10

标签: php arrays array-walk

我正在尝试将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 )

3 个答案:

答案 0 :(得分:3)

在每个if可能已经更改了值之后,每个$k都在测试该值。

if为90时,第一个4.0成功,将其更改为if

第二个4.0失败,因为80不在90if之间。

第三个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上的实际操作