Question

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;

}

When I echo empty($location), it prints out 1, why is expression 1 not executed?

Was it helpful?

Solution

You're not using switch statements properly. The way they work is to compare each case value against the initial switch value.

In your case, let's pretend $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

so that's why it doesn't run..

I'd recommend sticking to if .. else in this case.

OTHER TIPS

The empty function returns a boolean value of 1 or 0 http://uk3.php.net/empty

Whereas the switch / case statements check whether a variable holds a certain value and execute an expression depending on that

In you case, expression 1 should be executed if the value of $location==1 (you effectively asked for that when you typed switch($location)),

So the logic of your above code is:

if $location==1, execute expression 1
if $location%10000==0, execute expression 2
etc. etc.

is the value of $location==1?

A switch statement is not the same as an if/else statement. Switch statements are looking for specific values. If it finds the value specified in a given case statement, it runs the code after that case statement.

The following code:

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

Is the equivalent of this code:

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

Basically, switch statements are shortcuts for if/elseif/else blocks where you're checking for a single variable's equality against a bunch of possibilities.

Since empty() returns 0 or 1, your first case will run if $location is 1 (if $location is empty) or 0 (if $location isn't empty). It's almost like you've written the following:

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

Make sense? Instead of using a switch statement, you probably want the following:

if(empty($location)){
    // ...
}
elseif($location % 10000 == 0){
    // ...
}
// ...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top