81 votes

Existe-t-il une fonction PHP permettant de permuter les valeurs de deux variables ?

Disons par exemple que j'ai...

$var1 = "ABC"
$var2 = 123

et sous certaines conditions, je veux échanger les deux comme ceci...

$var1 = 123
$var2 = "ABC"

Existe-t-il une fonction PHP pour faire cela plutôt que de devoir créer une troisième variable pour contenir l'une des valeurs puis de redéfinir chacune d'elles, comme ceci...

$var3 = $var1
$var1 = $var2
$var2 = $var3

Pour une tâche aussi simple, il est probablement plus rapide d'utiliser une troisième variable de toute façon et je pourrais toujours créer ma propre fonction si je le voulais vraiment. Je me demandais juste si quelque chose comme ça existait ?

Mise à jour : L'utilisation d'une troisième variable ou son intégration dans une fonction est la meilleure solution. C'est propre et simple. J'ai posé la question plus par curiosité et la réponse choisie était en quelque sorte "la meilleure alternative suivante". Il suffit d'utiliser une troisième variable.

4 votes

Vous pouvez utiliser xor aussi, comme... b = a xor b , a = a xor b , b = a xor b devrait faire l'affaire... Je ne sais pas s'il y a une fonction, je ne suis pas bon en PHP.

3 votes

Ces réponses ressemblent à une sorte de concours d'obscurcissement.

91voto

Pekka 웃 Points 249607

Il n'y a pas de fonction que je connaisse, mais il y a une ligne simple qui est une courtoisie de Pete Graham :

list($a,$b) = array($b,$a);

Je ne suis pas sûr d'apprécier cette solution du point de vue de la maintenance, car elle n'est pas vraiment intuitive à comprendre.

De plus, comme le souligne @Paul Dixon, ce n'est pas très efficace, et c'est plus coûteux que d'utiliser une variable temporaire. Cela peut être intéressant dans une très grande boucle.

Cependant, une situation où cela est nécessaire me semble un peu fausse. Si vous voulez en discuter : Pourquoi avez-vous besoin de ça ?

3 votes

+1 - j'ai trouvé la même chose, et je suis d'accord, je ne suis pas sûr d'aimer ça non plus - utiliser une variable temporaire est considérablement mieux - tout comme écrire votre propre méthode d'échange si vous vous retrouvez à le faire souvent.

0 votes

+1, j'ai été devancé aussi :) J'aime l'idée en principe, mais malheureusement la syntaxe PHP laisse un mauvais goût...

0 votes

Wow, réponse super rapide. Je vous tire mon chapeau à tous ! c'est un joli petit truc que.

17voto

Arius2038 Points 2217

Il est également possible d'utiliser le vieux truc XOR ( Cependant, il ne fonctionne correctement que pour les entiers, et il ne rend pas le code plus facile à lire ).

$a ^= $b ^= $a ^= $b;

2 votes

Si vous l'utilisez avec des mots, contenant les mêmes parties, il renvoie un résultat drôle et inattendu : ideone.com/NGQVYH

10voto

Justin Ethier Points 57486

Oui, essayez. este :

// Test variables
$a = "content a";
$b = "content b";

// Swap $a and $b
list($a, $b) = array($b, $a);

Cela me rappelle python, où une syntaxe comme celle-ci est parfaitement valide :

a, b = b, a

C'est une honte que vous ne puissiez pas faire ce qui précède en PHP...

4voto

Thomas Clayson Points 17243
list($var1,$var2) = array($var2,$var1);

4voto

Bondye Points 4513

Celui-ci est plus rapide et nécessite moins de mémoire.

function swap(&$a, &$b) {
    $a = $a ^ $b;
    $b = $a ^ $b;
    $a = $a ^ $b;
}

$a = "One - 1";
$b = "Two - 2";

echo $a . $b; // One - 1Two - 2

swap($a, $b);

echo $a . $b; // Two - 2One - 1

Exemple de travail : http://codepad.viper-7.com/ytAIR4

1 votes

Une remarque pour tous : cette fonction ne fonctionne correctement dans tous les cas que si $a y $b sont de la même longueur, conformément à @m13r

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X