函数未返回预期结果

问题描述 投票:-1回答:2

我创建了下面的函数,它应该根据两个输入返回状态,但它总是在最后一个if语句中结束。我无法弄清楚为什么它会在最后一个结束。如果我评论最后一个,它最终会出现在上面的一个中。

    //Function to check if margin is OK or not
function check_margin($vpc, $bruto_margin_avg) {
    if(($vpc >= 1 && $vpc <= 15000) && ($bruto_margin_avg >= 33 && $bruto_margin_avg <= 40)) {
        //IF VPC is between 0-15000kn and bruto margin is between 33-40%
        $bruto = 'OK';
        $comment = '1';
    } else {
        $bruto = 'NO';
        $comment = '33% - 40%';
    }

    if(($vpc >= 15000 && $vpc <= 50000) && ($bruto_margin_avg >= 0 && $bruto_margin_avg <= 2)) {
        $bruto = 'OK';
        $comment = '2';
    } else {
        $bruto = 'NO';
        $comment = '25% - 30%';
    }

    if(($vpc >= 50000 && $vpc <= 80000) && ($bruto_margin_avg >= 23 && $bruto_margin_avg <= 27)) {
        $bruto = 'OK';
        $comment = '3';
    } else {
        $bruto = 'NO';
        $comment = '23% - 27%';
    }

    if($vpc > 80000 && $bruto_margin_avg > 21) {
        $bruto = 'OK';
        $comment = '';
    } else {
        $bruto = 'NO';
        $comment = '> 21%';
    }

    return array($bruto, $comment);
}

我的输入参数是这样的:

  $vpc = 1560.00;
  $bruto_margin_avg = 14.952937358001;

根据输入结果,它应该在第一个if语句中结束。以下代码无法提供正确的结果有什么问题?

php function if-statement
2个回答
1
投票

根据你在问题中的评论,我认为你真正想做的是测试$vpc的值,然后检查$bruto_margin_avg的值是否适合$vpc的值。这段代码会这样做:

// Function to check if margin is OK or not
function check_margin($vpc, $bruto_margin_avg) {
    if ($vpc >= 1 && $vpc <= 15000) {
        if ($bruto_margin_avg >= 33 && $bruto_margin_avg <= 40) {
        //IF VPC is between 0-15000kn and bruto margin is between 33-40%
            $bruto = 'OK';
            $comment = '1';
        } else {
            $bruto = 'NO';
            $comment = '33% - 40%';
        }
    }

    if ($vpc >= 15000 && $vpc <= 50000) {
        if ($bruto_margin_avg >= 0 && $bruto_margin_avg <= 2) {
            $bruto = 'OK';
            $comment = '2';
        } else {
            $bruto = 'NO';
            $comment = '25% - 30%';
        }
    }

    if ($vpc >= 50000 && $vpc <= 80000) {
        if ($bruto_margin_avg >= 23 && $bruto_margin_avg <= 27) {
            $bruto = 'OK';
            $comment = '3';
        } else {
            $bruto = 'NO';
            $comment = '23% - 27%';
        }
    }

    if ($vpc > 80000) {
        if ($bruto_margin_avg > 21) {
            $bruto = 'OK';
            $comment = '';
        } else {
            $bruto = 'NO';
            $comment = '> 21%';
        }
    }

    return array($bruto, $comment);
}

$vpc = 1560.00;
$bruto_margin_avg = 14.952937358001;
print_r(check_margin($vpc, $bruto_margin_avg));

产量

Array ( 
    [0] => NO 
    [1] => 33% - 40% 
)

Demo on 3v4l.org


0
投票

根据您的输入,第一个条件不符合要求。

if(($vpc >= 1 && $vpc <= 15000) && ($bruto_margin_avg >= 33 && $bruto_margin_avg <= 40))

以下条件满足您的输入。但

($vpc >= 1 && $vpc <= 15000)

以下不是。

($bruto_margin_avg >= 33 && $bruto_margin_avg <= 40)

如果你必须检查两个条件的任何一个条件是否为真,你可以使用||运营商。如下。

if(($vpc >= 1 && $vpc <= 15000) || ($bruto_margin_avg >= 33 && $bruto_margin_avg <= 40))
© www.soinside.com 2019 - 2024. All rights reserved.