Home  >  Article  >  Backend Development  >  What is the difference between switch and ifelse in PHP? Which one is faster to use?

What is the difference between switch and ifelse in PHP? Which one is faster to use?

藏色散人
藏色散人forward
2021-09-20 16:37:173502browse

Who is faster, PHP switch or ifelse?

For multiple if conditions, we use switch instead of ifelse, which will make the code clearer. So what is their efficiency comparison? From the PHP manual, I found that someone had already compared it, and I also conducted experiments with his code:

$s = time();
for ($i = 0; $i < 1000000000; ++$i) {
    $x = $i % 10;
    if ($x == 1) {
        $y = $x * 1;
    } elseif ($x == 2) {
        $y = $x * 2;
    } elseif ($x == 3) {
        $y = $x * 3;
    } elseif ($x == 4) {
        $y = $x * 4;
    } elseif ($x == 5) {
        $y = $x * 5;
    } elseif ($x == 6) {
        $y = $x * 6;
    } elseif ($x == 7) {
        $y = $x * 7;
    } elseif ($x == 8) {
        $y = $x * 8;
    } elseif ($x == 9) {
        $y = $x * 9;
    } else {
        $y = $x * 10;
    }
}
print("if: " . (time() - $s) . "sec\n");

$s = time();
for ($i = 0; $i < 1000000000; ++$i) {
    $x = $i % 10;
    switch ($x) {
        case 1:
            $y = $x * 1;
            break;
        case 2:
            $y = $x * 2;
            break;
        case 3:
            $y = $x * 3;
            break;
        case 4:
            $y = $x * 4;
            break;
        case 5:
            $y = $x * 5;
            break;
        case 6:
            $y = $x * 6;
            break;
        case 7:
            $y = $x * 7;
            break;
        case 8:
            $y = $x * 8;
            break;
        case 9:
            $y = $x * 9;
            break;
        default:
            $y = $x * 10;
    }
}
print("switch: " . (time() - $s) . "sec\n");

After looping 1000000000 times and adding operations to each judgment condition, we found the result It is switch that is more efficient and runs faster. The result on my computer is:

// if: 301sec
// switch: 255sec

Although switch is more efficient, there are also things that need to be paid attention to. First of all, the judgment value can only be Number, floating point number or string. Secondly, each judgment is an ordinary == judgment. That is to say, the following judgment results are not necessarily the same as yours:

$string = "2string";

switch ($string) {
    case 1:
        echo "this is 1";
        break;
    case 2:
        echo "this is 2";
        break;
    case '2string':
        echo "this is a string";
        break;
}

// this is 2

Yes, it is still a type cast during == comparison. The problem is that when comparing string and int values, they are forced to the int type. The result of the forced conversion of "2string" is exactly 2. Therefore, when using switch, you should ensure that the comparison value is consistent with the type of each case, otherwise unpredictable errors may occur.

参考代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E7%9A%84switch%E5%92%8Cifelse%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.php

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of What is the difference between switch and ifelse in PHP? Which one is faster to use?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete