1

我有一大组 if 语句,当其中一个为真时,不需要测试以下 if 语句。

我不知道最好的方法是什么。

我应该创建一个函数、开关还是 while 循环?

每个连续的 if 语句都是不同的,并且具有预先创建的输入值。我将尝试创建一个简单的示例来尝试更好地解释这一点。

$total = ($val1+$val2+$val3)/$arbitaryvalue
if($total > 2){//Do Something
}

$total = ($val1+$val2)/$anothervalue
if($total > 2){//Do Something different
}
4

5 回答 5

2

将它们弹出到前一个 if 语句的 else 中,这意味着只有在第一个条件评估为 false 时才运行。但是,如果您有很多 if 语句,这将变得一团糟,您问题中的示例是否代表了您的需求规模?

$total = ($val1+$val2+$val3)/$arbitaryvalue
if($total > 2){//Do Something
}
else
{

    $total = ($val1+$val2)/$anothervalue
        if($total > 2){//Do Something different
    }

}
于 2012-07-12T21:52:14.530 回答
1
if ( condition ) {

}

else if ( another_condition ) {

} 

... 

else if ( another_condition ) {

} 

ETC

于 2012-07-12T21:52:49.517 回答
0

决定是否使用循环将取决于一个真实的例子。如果如何设置 $total 有一个模式,那么我们可以使用循环。如果没有,最好只做连续的 if 语句:

if(($val1+$val2+$val3)/$arbitraryvalue > 2){
   //Do Something
}
else if(($val1+$val2)/$anothervalue > 2)
{
   //Do something different
}

但是,如果 $val1+$val2 和 $anothervalue 部分存在模式,则循环可能是更好的解决方案。在我看来,您的决定还应该取决于该模式是否有意义。

于 2012-07-12T21:55:36.367 回答
0

由于使用else不会有益且难以维护,因此我建议使用功能。

一个函数会更理想,因为一旦满足条件,您可以随时退出该函数,使用return.

如果从函数内部调用,return 语句会立即结束当前函数的执行,并将其参数作为函数调用的值返回。

下面包括一个示例函数,其中设置了用于演示目的的虚拟值:

<?php

function checkConditions(){   
    $val1 = 5;
    $val2 = 10;
    $val3 = 8;

    $arbitaryvalue = 5;
    $anothervalue = 4;

    $total = ($val1+$val2+$val3) / $arbitaryvalue;

    if($total > 2){
        return 'condition 1';
    }  

    $total = ($val1+$val2) / $anothervalue;
    if($total > 2){
        return 'condition 2';
    } 

    return 'no conditions met';
}

echo checkConditions();
?>

如果要执行注释代码中指示的某种类型的操作,则可以在从函数返回之前执行适当的操作。

于 2012-07-12T22:05:12.870 回答
0

Ben Everard 说的是正确的方法,但还有许多其他解决方案:

$conditions = array(
  array(
    'condition' => ($val1+$val2+$val3)/$arbitaryvalue,
    'todo' => 'doSomething',
  ),
  array(
    'condition' => ($val1+$val2)/$arbitaryvalue,
    'todo' => 'doSomethingDifferent',
  ),
  // ...
);

foreach ($conditions as $item)
{
  if ($item['condition'])
  {
    // $item['todo']();
    call_user_func($item['todo']);
    break;
  }
}


function doSomething()
{
  // ...
}

function doSomethingDifferent()
{
  // ...
}
于 2012-07-12T22:08:19.583 回答