如何不使用中间变量交换两个PHP变量的值?
解决PHP不借助中间变量交换$x和$y的问题
首先得说你用引用赋值的思路为啥没得到预期结果:当你执行$x = &$y;时,$x已经变成了$y的引用——也就是说**$x和$y现在指向同一个内存地址**,它们的值都是2。这时候再执行$y = &$x;根本不会改变任何东西,因为两者本来就是同一个引用,最后自然输出22啦。
下面给你几种靠谱的、不用中间变量的交换方法:
1. 算术运算交换(仅适用于数字类型)
利用加减运算的特性来交换,逻辑简单易懂:
$x = 1; $y = 2; $x = $x + $y; // $x 变成 1+2=3 $y = $x - $y; // $y 变成 3-2=1 $x = $x - $y; // $x 变成 3-1=2 echo $x.$y; // 输出 21
⚠️ 注意:如果数值很大的话可能会出现溢出问题,小数字场景完全没问题。
2. 位运算异或交换(仅适用于整数类型)
异或运算的特性是「相同位为0,不同位为1」,用这个方法交换不会有溢出风险:
$x = 1; $y = 2; $x ^= $y; $y ^= $x; $x ^= $y; echo $x.$y; // 输出 21
3. PHP专属的解构赋值交换(推荐!支持所有类型)
这是PHP里最直观、可读性最高的方法,不管变量是数字、字符串还是其他类型都能完美交换:
PHP 7+ 简洁写法
$x = 1; $y = 2; [$x, $y] = [$y, $x]; echo $x.$y; // 输出 21
兼容旧版本PHP的写法
$x = 1; $y = 2; list($x, $y) = array($y, $x); echo $x.$y; // 输出 21
如果是日常开发,强烈推荐用解构赋值的方式,代码清晰还不容易出错~
内容的提问来源于stack exchange,提问作者Toleo
相关产品推荐
相关产品推荐

