3

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

3 回答 3

3

if在前一个可能已经更改值之后,每个都在测试该值。

$k是 90 时,第一个if成功,将其更改为4.0.

第二个if失败,因为4.0不在80and之间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,你不会更新它。

于 2019-02-06T10:58:26.920 回答
2

你必须elseif

<?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上查看它的实际效果

于 2019-02-06T10:57:53.397 回答
2

检查函数中的每一个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';
}
于 2019-02-06T10:54:53.827 回答