max
max

Reputation: 97

switch loop doesnt recognize zero "0" php

I have this simple function to convert the number of comments of an user to types of members.

function checkMemberN($numMessages){
    $n= $numMessages;

    switch ($n) {
        case ($n<50): $type="New"; break;
        case ($n>=50 && $n<250):$type="Frequent";break;
        case ($n>=250 && $n<1000): $type="Master";break;
        default: $type="undefinded";
    }   

    return $type;   
}   

echo checkMemberN(0);

It looks like it doesn't recognize zero (0), because when I put 1 or a higher number it retrieves the correct user type. What am I doing wrong?

Upvotes: 0

Views: 39

Answers (1)

Alejandro De Cicco
Alejandro De Cicco

Reputation: 1236

When you use switch, the first case which returns a value equal to the given one is selected. In this case, your argument (zero) is a false-y value. That's why the first case that returns false is chosen: "Frequent". To fix it, you can do this:

if ($n<50) {
  $type = "New";
} else if ($n>=50 && $n<250) {
  $type = "Frequent";
} else if ($n>=250 && $n<1000) {
  $type = "Master";
} else {
 $type = "undefined";
}

If you still want to use switch, you can change the argument to true:

switch (true) {
    case ($n<50): $type="New"; break;
    case ($n>=50 && $n<250):$type="Frequent";break;
    case ($n>=250 && $n<1000): $type="Master";break;
    default: $type="undefinded";
}    

Here, the first case which returns true will be used.

Upvotes: 6

Related Questions