2

我使用 javascript 将案例发送到 ajax 函数。案例取自链接 ID。例如,如果用户单击此链接: <a id="answer-yes-123">click this</a> javascript 会将 id 拆分为 3 部分,并将中间部分“yes”发送给 ajax 作为案例。对于大多数情况,当 ajax 收到案例时,如果是,则执行此操作,否则执行此操作。

switch ($case) {
    case 'yes' :
        $assignment->add();
        break;
    case 'no' :
        $assignment->remove();
        break;

有一个例外——数字案例。如果链接的中间部分是数字,我不知道如何进行切换语句。可能有无限的不同数字,我不能把它们都做成一个案例,如何让一个条件像if(is_int($case))一个案例一样工作?

4

4 回答 4

6

在这种switch default:情况下,您可以测试is_int()

switch ($case) {
    case 'yes' :
        $assignment->add();
        break;
    case 'no' :
        $assignment->remove();
        break;
    default:
        // Determine the numeric value however you need to 
        // is_int(), is_numeric(), preg_match(), whatever...
        if (is_int($case)) {
           // numeric stuff
        }
}

这在逻辑上有点奇怪,因为如果没有其他default:条件满足,通常用于执行此操作。但是,在您的情况下,如果您不需要进一步划分数字大小写,它就可以工作。请务必在您的代码中清楚地注释它,这样当您在六个月后回顾它时,您会记得为什么这样做。

评论后更新:

由于您已经使用了default:,我相信您实际上可以在 a 中使用表达式case。这需要更清晰的评论,因为它不是一种常见的做法,并且有点违背 a 的目的switch

switch ($case) {
    case 'yes' :
        $assignment->add();
        break;
    case 'no' :
        $assignment->remove();
        break;
    // This actually works, but is highly weird. 
    // One of those things I can't believe PHP allows.
    // is_int(), is_numeric(), preg_match(), whatever... 
    case is_int($case):
        // Numeric stuff
        break;
    default:
        // default stuff
}
于 2012-08-29T14:18:18.543 回答
2

在开关周围写 if 语句。

我想到了这样的事情:

if (is_int($case)) {
   // ...
} else {
    switch ($case) {
        // ...
    }
}
于 2012-08-29T14:18:11.787 回答
2

Michael Berkowski 的回答是完美的,但如果不想使用这样的默认情况也可以:

switch (preg_replace('/^[0-9]*$/','numeric',$case)) {
case 'yes' :
    $assignment->add();
    break;
case 'no' :
    $assignment->remove();
    break;
case 'numeric' :
    $assignment->remove();
    break;
default:
    //...
    break;
}
于 2012-08-29T14:26:57.847 回答
0

使用 PHP 的is_numeric

http://php.net/manual/en/function.is-numeric.php

if (is_numeric($case)) {
   // ...
} else {
    switch ($case) {
        // ...
    }
}
于 2012-08-29T14:18:12.207 回答