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;

例外が 1 つあります。数値の場合です。リンクの中間部分が数字の場合、切り替えステートメントの作成方法がわかりません。潜在的に無制限の異なる数があり、それぞれをケースにすることはできません。ケース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:通常、他に何も満たされない場合にこれを実行するために使用されるためです。ただし、あなたの場合、数値のケースをさらに分割する必要がない場合は、うまく機能します。コード内で明確にコメントしてください。そうすれば、6 か月後にそれを振り返ったときになぜそれを行ったかを思い出すことができます。

コメント後の更新:

を既に使用しているのでdefault:、実際には 内で式を使用できると思います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

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 に答える
2

スイッチの周りに if ステートメントを記述します。

このようなことが頭に浮かびます:

if (is_int($case)) {
   // ...
} else {
    switch ($case) {
        // ...
    }
}
于 2012-08-29T14:18:11.787 に答える
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 に答える