PHP ELSE IF оператор - PullRequest
       12

PHP ELSE IF оператор

0 голосов
/ 02 декабря 2011

не может получить мое else if заявление на работу, у кого-нибудь есть идеи? это работает без остального, если ....

$waveFeet = round("$ar2");
        if ($waveFeet >= 2) {
            echo $waveFeet - 1;
        }
        else if ($waveFeet > 5) {
            echo $waveFeet - 2;
        }

        else 
        {
            echo "$wavefeet";   
        }

также в качестве дополнительного вопроса, может кто-нибудь сказать мне, как изменить мой раунд (), чтобы он всегда был округлен (вниз) вместо округления вверх или вниз ...?

Ответы [ 5 ]

1 голос
/ 02 декабря 2011

Используя третий аргумент round , вы можете округлить его до

echo $waveFeet = round($ar2, 2,  PHP_ROUND_HALF_DOWN);

и для вашего if ваше else if условие никогда не будет выполнено, как если бы $waveFeet было больше или равно 2, первое условие будет истинным, следовательно, ваше elseif условие никогда не будет истинным ,

Вы должны изменить его на

    if ($waveFeet > 5) {
        echo $waveFeet - 1;
    }
    else if ($waveFeet >= 2) {
        echo $waveFeet - 2;
    }    
    else 
    {
        echo $wavefeet;   
    }
1 голос
/ 02 декабря 2011

Попробуйте оператор с определенным значением, скажем, $waveFeet = 10;, затем пошагово пройдитесь по коду. Первое условие успешно выполняется, поэтому более поздние ветви никогда не проверяются. Фактически, единственный раз, когда первая ветвь не введена, это когда $waveFeet < 2, и в этом случае будет выполняться последняя ветвь тела. Таким образом, средняя ветвь никогда не выполняется. Более эксклюзивный случай должен стоять первым:

if (5 < $waveFeet) {
    ...
} elseif (2 <= $waveFeet) {
    ...
} else {
    # $waveFeet < 2
    ...
}

Для полной безопасности вы можете указать оба граничных условия:

    ...
} elseif (2 <= $waveFeet && $waveFeet <= 5) {
    ...

Неэффективность из-за избыточности минимальна, а код более понятен. По мере того, как вы становитесь более опытным, вы можете отказаться от такого рода вещей.

Если вы хотите округлить хотя бы отрицательные числа, используйте floor. Если вы хотите округлить до нуля (то есть усечь), приведите к int:

$waveFeet = (int) $ar2;
0 голосов
/ 02 декабря 2011

PHP встроенные функции floor() и ceil() округляют число вверх и вниз соответственно.Я рекомендую опубликовать полученную ошибку, чтобы мы могли помочь вам быстрее =)

Попробуйте:

$waveFeet = floor($ar2);
if ($waveFeet >= 2 && $waveFeet <= 5 ) {
    echo $waveFeet - 1;
} else if ($waveFeet > 5) {
    echo $waveFeet - 2;
} else {
    echo $wavefeet;   
}

Обратите внимание на изменение первого условия (добавлено && $ waveFeet <=5 </strong>)

Я думаю, что проблема может заключаться в том, что диапазоны, которые вы используете в первом и втором условиях, перекрываются, и очень вероятно, что в случае, скажем, $waveFeet == 6 PHP оценивает вашипервое условие (изначально $waveFeet >= 2), и оно оказалось true, поэтому PHP не проверяет оператор else if ... Всякий раз, когда возможно использовать дизъюнктные условия, я рекомендую вам сделать это ...

0 голосов
/ 02 декабря 2011

В вашем коде нет ничего плохого (за исключением того, что вы можете передать аргумент функции без кавычек).То, как вы проверяете это, неверно.

оно не перейдет в состояние else if, потому что условие будет выполнено при первой проверке.

0 голосов
/ 02 декабря 2011

Вы можете использовать пол для пуха раунд

$waveFeet = floor($ar2);                

if ($waveFeet > 5)
    echo $waveFeet - 2;
else if ($waveFeet >= 2) 
    echo $waveFeet - 1;
else 
    echo $wavefeet;   

вы должны сначала проверить, что 5 bcz 5 больше, чем 2, и ваше первое условие> = 2 также выполнено, если нет> 5, поэтому управление переходит к первому условию, а не ко второму ....

...