Cet article vous présentera switch et ifelse en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Pour plusieurs conditions if, nous utilisons switch au lieu de ifelse pour rendre le code plus clair. Alors, quelle est leur comparaison d'efficacité ? D'après le manuel PHP, j'ai découvert que quelqu'un l'avait déjà comparé, et j'ai également mené des expériences avec son 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");
Après avoir bouclé 1000000000 fois et ajouté des opérations à chaque condition de jugement, nous avons trouvé le résultat Le commutateur est plus efficace et fonctionne plus rapidement. Le résultat sur mon ordinateur est :
// if: 301sec // switch: 255sec
Bien que le commutateur soit plus efficace, il y a aussi des choses auxquelles il faut prêter attention. Tout d'abord, la valeur de jugement ne peut être que le nombre, nombre à virgule flottante ou chaîne. Deuxièmement, chaque jugement est un jugement == ordinaire, c'est-à-dire que les résultats du jugement suivant ne sont pas nécessairement les mêmes que les vôtres :
$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
Oui, c'est toujours un type exprimé lors de la comparaison == Le problème. est que lors de la comparaison des valeurs string et int, ils sont obligés de taper int. Le résultat de la conversion forcée de "2string" est exactement 2. Par conséquent, lorsque vous utilisez switch, vous devez vous assurer que la valeur de comparaison est cohérente avec le type de chaque cas, sinon des erreurs imprévisibles pourraient se produire.
Code de référence :
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
Apprentissage recommandé : Tutoriel vidéo php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!