0
echo empty($location);
switch($location){
    case (empty($location)):
expression 1;
    break;
    case ($location%10000==0):
expression 2;
    break;
    case ($location%100==0):
expression 3;
    break;
    default:
    expression 4;
    break;

}

empty($ location)をエコーすると、1が出力されますが、式1が実行されないのはなぜですか?

4

3 に答える 3

1

switchステートメントを適切に使用していません。それらが機能する方法は、各ケース値を初期値と比較することswitchです。

あなたの場合、ふりをしましょう$location = null;

echo empty($location);    // true: null is considered empty.

switch ($location) {
    case empty($location) :    // this performs the check:
                               // $location == empty($location)
                               //      null == true ==> false

だからそれは実行されません。

if .. elseこの場合、固執することをお勧めします。

于 2009-12-13T04:49:13.067 に答える
0

このempty関数は、1または0のブール値を返しますhttp://uk3.php.net/empty

一方、switch / caseステートメントは変数が特定の値を保持しているかどうかをチェックし、それに応じて式を実行します

あなたの場合、(あなたがタイプしたときに効果的にそれを求めた)expression 1の値が、$location==1switch($location)

したがって、上記のコードのロジックは次のとおりです。

$ location == 1の場合、式1を実行します
。$ location%10000 == 0の場合、式2を実行します

の値は$location==1

于 2009-12-13T04:48:51.803 に答える
0

switchステートメントはステートメントと同じではありませんif/else。Switchステートメントは特定の値を探しています。指定されたステートメントで指定された値が見つかった場合、caseそのステートメントの後にコードを実行しますcase

次のコード:

switch($x)
    case 1:
        // some stuff
        break;
    case 2:
        // some other stuff
        break;
    default:
        // some more stuff
        break;

このコードと同等です:

if($x == 1){
    // some stuff
}
elseif($x == 2){
    // some other stuff
}
else{
    // some more stuff
}

基本的に、ステートメントは、多数の可能性に対して単一の変数が等しいかどうかをチェックするブロックswitchのショートカットです。if/elseif/else

empty()0または1を返すので、が1(空の場合)または0(空でない場合)の場合、最初のcase実行が実行されます。次のように書いたようなものです。$location$location$location

elseif($location == empty($location)){ ...

わかる?ステートメントを使用する代わりに、switchおそらく次のものが必要です。

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
于 2009-12-13T05:02:08.357 に答える