3

我不确定这是一个好问题,但这是我的问题。我的if语句太长了,我想知道是否有其他类型的语法可以缩短它:

if (($time1 <= $one_day)&&
    ($time2 <= $one_day)&&
    ($time3 <= $one_day)&&
    ($time4 <= $one_day)&&
    ($time5 <= $one_day)&&
    ($time1 != NULL)&&
    ($time2 != NULL)&&
    ($time3 != NULL)&&
    ($time4 != NULL)&&
    ($time5 != NULL)){
    //do sometihng
}

这是一个例子,但我有一个类似的例子..&&($time15 <= $one_day)

该声明非常不言自明,$time1, $time2, etc可以空着回来,所以我必须检查它们NULL是否

有任何想法吗?

谢谢

4

7 回答 7

3

您可以将常见的东西放在一个函数中:

function validate_time($time, $one_day) {
    return $time <= $one_day && $time != NULL;
}
if (validate_time($time1, $one_day) &&
    validate_time($time2, $one_day) &&
    validate_time($time3, $one_day) &&
    validate_time($time4, $one_day) &&
    validate_time($time5, $one_day)) {
    // do something
}

您可能想要重构代码并消除复制和粘贴这些检查的需要。完成工作的另一种方法:

while (true) {
    foreach (array($time1, $time2, $time3, $time4, $time5) as $time) {
        if ($time > $one_day || $time == NULL) {
            break 2;
        }
    }
    // do something
    break;
}

上面的内容也可以放在一个函数中,这会使 while 循环和break关键字变得多余。然后用return替换break 2

于 2011-10-04T16:55:46.213 回答
2

为变量使用数组会有所帮助。您可以遍历它们并检查。

于 2011-10-04T16:56:26.447 回答
1

将时间放在一个数组中并有一个for循环来进行检查。

于 2011-10-04T16:56:33.437 回答
1

考虑使用数组,而不是使用 15 个相似但不同的变量。

于 2011-10-04T16:56:45.683 回答
1

如果您必须(或想要)保留原始变量名而不使用数组,这里是一个很好的解决方案(对于 $time1 到 $time5):

$ok = true;
for ($i = 1; $i <= 5; $i++)
{
    $var =& ${'time'.$i};
    if ( ! ($var <= $one_day && $var != NULL))
    {
        $ok = false;
    }
}

if ($ok)
{
    //do something
}
于 2011-10-04T17:05:52.010 回答
0

您可以将所有值设置为数组并使用 For 循环进行比较。

于 2011-10-04T16:57:27.303 回答
0

一个功能化的版本,应该有助于您的重用。这类似于 Lekensteyns 代码。

$times = array(
    'time',
    'time',
    'time',
    'time',
    'time',
);

function validateTime($checks, $limit) 
{
    foreach($checks as $check) {
        if($check == null || $check > $limit) {
            return false;
        }
    }
    return true;
}

if(validateTime($times,$one_day) == true) {
  //codey code.
}
于 2011-10-04T17:31:08.203 回答