Функция не возвращает ожидаемый результат - PullRequest
0 голосов
/ 22 октября 2018

Я создал функцию ниже, которая должна возвращать статус, основанный на двух входах, но он всегда заканчивается последним оператором 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.Что плохого в приведенном ниже коде, который не может дать правильный результат?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Исходя из ваших комментариев в вопросе, я думаю, что вы действительно хотите сделать, это проверить значение $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% 
)

Демонстрация на 3v4l.org

0 голосов
/ 22 октября 2018

Согласно вашим входам первое условие не выполняется.

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...