You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用中间变量交换两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:55