Hướng dẫn which is faster switch or if php? - cái nào là chuyển đổi nhanh hơn hoặc nếu php?

Ví dụ đầu tiên của bạn chỉ đơn giản là sai. Bạn cần elseif thay vì chỉ else.

Nếu bạn sử dụng if..elseif... hoặc switch chủ yếu là vấn đề ưu tiên. Hiệu suất là như nhau.

Tuy nhiên, nếu tất cả các điều kiện của bạn thuộc loại x == value với x giống nhau trong mọi điều kiện, switch thường có ý nghĩa. Tôi cũng chỉ sử dụng switch nếu có nhiều hơn ví dụ: Hai điều kiện.

Một trường hợp trong đó switch thực sự mang lại cho bạn lợi thế hiệu suất là nếu phần biến là một cuộc gọi chức năng:

switch(some_func()) {
    case 1: ... break;
    case 2: ... break;
}

Sau đó

if(some_func() == 1) {}
elseif(some_func() == 2) {}
1 chỉ được gọi một lần trong khi với

if(some_func() == 1) {}
elseif(some_func() == 2) {}

Nó sẽ được gọi là hai lần - bao gồm các tác dụng phụ có thể xảy ra của chức năng xảy ra hai lần. Tuy nhiên, bạn luôn có thể sử dụng

if(some_func() == 1) {}
elseif(some_func() == 2) {}
2 và sau đó sử dụng
if(some_func() == 1) {}
elseif(some_func() == 2) {}
3 trong các điều kiện
if(some_func() == 1) {}
elseif(some_func() == 2) {}
4 của bạn - để bạn có thể tránh được vấn đề này.

Một trường hợp bạn không thể sử dụng công tắc là khi bạn có điều kiện phức tạp hơn - switch chỉ hoạt động cho

if(some_func() == 1) {}
elseif(some_func() == 2) {}
6 với
if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 là một giá trị không đổi.cannot use switch at all is when you have more complex conditions - switch only works for
if(some_func() == 1) {}
elseif(some_func() == 2) {}
6 with
if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 being a constant value.

$ n -= 6;

$ iter = 500000;
$ start = microtime (true);iter = 500000;
$ n = 0;start = microtime(true);
for ($ c = 0; $ cn = 0;
$ i = $ c % 16;$c=0; $c<7*$iter; $c++) {
if ($ i === 0) $ n += 0;i = $c % 16;
otherif ($ i === 1) $ n -= 1; ($i===0) $n += 0;
otherif ($ i === 2) $ n -= 2; ($i===1) $n -= 1;
otherif ($ i === 3) $ n += 3; ($i===2) $n -= 2;
otherif ($ i === 4) $ n += 4; ($i===3) $n += 3;
otherif ($ i === 5) $ n -= 5; ($i===4) $n += 4;
otherif ($ i === 6) $ n -= 6; ($i===5) $n -= 5;
otherif ($ i === 7) $ n += 7; ($i===6) $n -= 6;
otherif ($ i === 8) $ n += 0; ($i===7) $n += 7;
otherif ($ i === 9) $ n -= 1; ($i===8) $n += 0;
otherif ($ i === 10) $ n -= 2; ($i===9) $n -= 1;
otherif ($ i === 11) $ n += 3; ($i===10) $n -= 2;
otherif ($ i === 12) $ n += 4; ($i===11) $n += 3;
otherif ($ i === 13) $ n -= 5; ($i===12) $n += 4;
otherif ($ i === 14) $ n -= 6; ($i===13) $n -= 5;
otherif ($ i === 15) $ n += 7; ($i===14) $n -= 6;
} ($i===15) $n += 7;
echo'result: ';
Echo microtime (true) - $ start. "(Phẳng nếu) \ n"; 'RESULT: ';
// Kết quả: 0.45587396621704 (phẳng nếu) microtime(true) - $start. " (FLAT IF)\n";
chuyển đổi ($ i) {
$ n = 0;start = microtime(true);
for ($ c = 0; $ cn = 0;
$ i = $ c % 16;$c=0; $c<7*$iter; $c++) {
if ($ i === 0) $ n += 0;i = $c % 16;
otherif ($ i === 1) $ n -= 1; ($i) {
otherif ($ i === 2) $ n -= 2; 0:
otherif ($ i === 3) $ n += 3;n += 0;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 1:
otherif ($ i === 6) $ n -= 6;n -= 1;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 2:
otherif ($ i === 6) $ n -= 6;n -= 2;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 3:
otherif ($ i === 6) $ n -= 6;n += 3;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 4:
otherif ($ i === 6) $ n -= 6;n += 4;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 5:
otherif ($ i === 6) $ n -= 6;n -= 5;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 6:
otherif ($ i === 6) $ n -= 6;n -= 6;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 7:
otherif ($ i === 6) $ n -= 6;n += 7;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 8:
otherif ($ i === 3) $ n += 3;n += 0;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 9:
otherif ($ i === 6) $ n -= 6;n -= 1;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 10:
otherif ($ i === 6) $ n -= 6;n -= 2;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 11:
otherif ($ i === 6) $ n -= 6;n += 3;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 12:
otherif ($ i === 6) $ n -= 6;n += 4;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 13:
otherif ($ i === 6) $ n -= 6;n -= 5;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 14:
otherif ($ i === 6) $ n -= 6;n -= 6;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5; 15:
otherif ($ i === 6) $ n -= 6;n += 7;
otherif ($ i === 4) $ n += 4;;
otherif ($ i === 5) $ n -= 5;
echo'result: ';
Echo microtime (true) - $ start. "(Phẳng nếu) \ n"; 'RESULT: ';
// Kết quả: 0.45587396621704 (phẳng nếu) microtime(true) - $start. " (SWITCH CASE)\n";
chuyển đổi ($ i) {
$ n = 0;start = microtime(true);
for ($ c = 0; $ cn = 0;
$ i = $ c % 16;$c=0; $c<7*$iter; $c++) {
if ($ i === 0) $ n += 0;i = $c % 16;
CASE0: ($i<8) {
$ n += 0; ($i < 4) {
phá vỡ; ($i < 2) {
otherif ($ i === 1) $ n -= 1; ($i===0) $n += 0;
trường hợp 1: $n -= 1;
$ n -= 1;else {
CASE2: ($i===2) $n -= 2;
$ n -= 2; $n += 3;
otherif ($ i === 5) $ n -= 5;
$ n -= 1;else {
CASE2: ($i < 6) {
$ n -= 2; ($i===4) $n += 4;
CASE3: $n -= 5;
$ n -= 1;else {
CASE2: ($i===6) $n -= 6;
$ n -= 2; $n += 7;
otherif ($ i === 5) $ n -= 5;
otherif ($ i === 5) $ n -= 5;
$ n -= 1;else {
CASE2: ($i < 12) {
$ n -= 2; ($i < 10) {
CASE3: ($i===8) $n += 0;
trường hợp 1: $n -= 1;
$ n -= 1;else {
CASE2: ($i===10) $n -= 2;
$ n -= 2; $n += 3;
otherif ($ i === 5) $ n -= 5;
$ n -= 1;else {
CASE2: ($i < 14) {
$ n -= 2; ($i===12) $n += 4;
CASE3: $n -= 5;
$ n -= 1;else {
CASE2: ($i===14) $n -= 6;
$ n -= 2; $n += 7;
otherif ($ i === 5) $ n -= 5;
otherif ($ i === 5) $ n -= 5;
otherif ($ i === 5) $ n -= 5;
echo'result: ';
Echo microtime (true) - $ start. "(Phẳng nếu) \ n"; 'RESULT: ';
// Kết quả: 0.45587396621704 (phẳng nếu) microtime(true) - $start . " (NESTED IF)\n";
chuyển đổi ($ i) {

Là nếu hoặc chuyển đổi nhanh hơn?

Hóa ra, câu lệnh chuyển đổi nhanh hơn trong hầu hết các trường hợp khi so sánh với IF-Else, nhưng chỉ nhanh hơn đáng kể khi số lượng điều kiện lớn.Sự khác biệt chính về hiệu suất giữa hai là chi phí gia tăng của một điều kiện bổ sung lớn hơn đối với IF-Else so với đối với Switch.the switch statement is faster in most cases when compared to if-else , but significantly faster only when the number of conditions is large. The primary difference in performance between the two is that the incremental cost of an additional condition is larger for if-else than it is for switch .

Điều gì tốt hơn nếu hoặc chuyển đổi?

Một câu lệnh Switch hoạt động nhanh hơn nhiều so với thang if-else tương đương.Đó là do trình biên dịch tạo ra một bảng nhảy cho một công tắc trong quá trình biên dịch.Kết quả là, trong quá trình thực hiện, thay vì kiểm tra trường hợp nào được thỏa mãn, nó chỉ quyết định trường hợp nào phải được thực thi.. It's because the compiler generates a jump table for a switch during compilation. As a result, during execution, instead of checking which case is satisfied, it only decides which case has to be executed.