Après avoir lu un petit article sur le swapping de variable en JS, je me suis dis que je pouvais transposer l’idée pour le PHP.
Dans beaucoup de situation, les développeurs auront la nécessité d’échanger 2 variables. Je pense qu’il est obligatoire de connaître plusieurs façons d’effectuer l’échange de variables.
Variable temporaire
L’échange de 2 variables à l’aide d’une 3eme variable temporaire est classique. Comme son nom l’indique, cette approche nécessite d’échanger les valeurs des variables $a et $b à l’aide d’une variable temporaire $temp :
$a = 10;
$b = 20;
$temp;
$temp = $a;
$a = $b;
$b = $temp;
// Résultat
echo $a; // => 20
echo $b; // => 10
Assignement par restructuration
La méthode que je vais montrer n’est valable qu’à partir de la version 7.1 de PHP. Elle ne fonctionne absolument pas avec les versions antérieures.
Notez-le de votre côté !
$a = 10;
$b = 20;
[$a, $b] = [$b, $a];
echo $a; // => 20
echo $b; // => 10
Comme vous pouvez le constater, cette technique est plus rapide, et n’a aucunement besoin d’une troisième variable.
La ligne [$a, $b] = [$b, $a]; permet de switcher les variables que vous souhaitez, dans l’ordre que vous souhaitez.
Cette technique est même fonctionnelle avec autant de variables que vous souhaitez :
$a = 10;
$b = 20;
$c = 30;
[$a, $b, $c] = [$b, $c, $a];
echo $a; // => 20
echo $b; // => 30
echo $c; // => 10
Addition et différence
Cette technique échange des variables sans utiliser de mémoire supplémentaire.
Vous l’aurez compris, l’exemple suivant permute les variables $a et b à l’aide des opérateurs arithmétiques d’addition et de soustraction :
$a = 10;
$b = 20;
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
echo $a; // 20
echo $b; // 10
Initialement, $a vaut 10 et $b vaut 20. Voici l’explication des 3 instructions :
$a = $a + $b attribue à $a la valeur 10 + 20.
$b = $a - $b attribue à $b la valeur 10+20-20 = 10.
$a = $a - $b attribue à $a la valeur 10+20-10 = 20.
Enfin, $a vaut 20 et $b vaut 10. L’échange de $a et $b a été effectué.
Bien que cette approche n’utilise pas de variables temporaires, elle présente des limites considérables :
– Tout d’abord, vous ne pouvez échanger que des entiers.
– Deuxièmement, soyez conscient du débordement des nombres lorsque vous effectuez l’addition à la première étape $a = $a + $b.
Si vous connaissez d’autres algorithmes, simple ou complexe, qui permettent la permutation de variables en PHP, n’hésitez pas à les partager. Je les ajouterai à cette article.
Mannini JP
26 juillet 2023 à 5 h 33 min
Le plus rapide en réalité est la variable temporaire.
La technique avec un tableau est plus rapide sur le papier mais pas pour l’ordinateur qui va devoir créer deux tableaux temporaires, affecter deux variables aux deux références dans chacun des tableaux, puis échanger les deux liens (il n’y a pas de véritable pointeur en. PHP vu que la gestion de la mémoire est dynamique).
Ne parlons pas des méthodes avec des calculs…. Un calcul est toujours plus coûteux qu’une affection…
Si vous réalisez des applications complexes, ceci est très important !
guillaume
27 juillet 2023 à 21 h 04 min
J’avoue ne pas avoir fait de gros tests sur ce genre de technique.
Cool que tu partages ton retour d’expérience sur ce sujet 🙂
Je suis curieux des limites de ce genre de technique.