Home > Article > Backend Development > PHP: Which one is more efficient, switch-case or if-else?
I was writing a PHP program in the morning. Because it had to process a large amount of data, I had to consider the running time issue. Then I encountered a problem when calculating the weight of each item. I was considering whether to use switch-case or if-else. I looked online and everyone said switch-case. The efficiency is much higher than if-else. I wrote a few programs and tested it. It is like this. Especially under a large amount of data and multiple conditions, switch-case is much more efficient than if-else. In fact, switch-case is much more efficient than if-else. This is also understandable, because the comparison judgment statements of switch-case are very concentrated, so cache will not be refreshed due to constant comparison and judgment branches. However, the comparison and judgment part of if-else is relatively scattered. Each comparison has to jump to a very far place, so the cache needs to be refreshed every time (almost every time), which naturally causes the speed to be very slow.
The following is something "stolen" from the compilation principle:
switch(val){ case 1:...;break; case 2:...;break; case 4:...;break; case 6:...;break; case 7:...;break; default:...; } 对应的汇编是 addr_tab: dd def_addr dd addr1 dd addr2 dd def_addr dd addr4 dd def_addr dd addr6 dd addr7 cmp val,7 ja def_addr jmp dword ptr [eax*4+addr_tab] addr1: .... addr2: .... addr4: .... addr6: .... addr7: .... def_addr: ....
Switch has a speed advantage compared to if. One is to use the method of transferring the address list; the other is that switch is generally not used in loose situations." Instead of using the "compare-shift" method, the instruction pair dec(sub)-jz is used. The latter not only shortens the length of the instruction, but also has an advantage in speed.
I won’t post the test of the program. Those who are interested should test it themselves. OK, I decided to use switch-case!
The above is the detailed content of PHP: Which one is more efficient, switch-case or if-else?. For more information, please follow other related articles on the PHP Chinese website!