MENU

PHP交互2个变量的值

March 9, 2021 • PHP

借助第三方变量的方式

这种方式也是最容易联想到的,通过一个临时变量存储其中一个变量的值来达到交互的目的。

在PHP语言中就如下

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

$a = 1;
$b = 2;

swap($a, $b);
var_dump($a, $b);
// int(2)
// int(1)

那么如果在Golang中就更加简单,因为golang有个特性是函数可以返回多个值,借助这个特性可以一行语句达到交换变量的目的。

func main() {
    var a = 1
    var b = 2
    
    a,b = b,a
    fmt.Println(a, b) // 2 1
}

通过位运算符异或方式

上面所说的方式并不是这次的重点,本次主要想记录一下通过位运算符的方式来交换2个变量,并且不借助于第三方变量。先看代码

function swapByBit(&$a, &$b) {
    $a = $a ^ $b;
    $b = $a ^ $b;
    $a = $a ^ $b;
}
$a = 1;
$b = 2;

swapByBit($a, $b);
var_dump($a, $b);
// int(2)
// int(1)

通过位运算符的方式主要是基于异或(^)运算的如下特性:

  1. 任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
  2. 任意一个变量X与0进行异或运算,结果不变,即X^0=X
  3. 异或运算具有可结合性,即a^b^c =(a^b)^c = a^(b^c)
  4. 异或运算具有可交换性,即a^b = b^a

更新一波php通过list方法交换2个变量

function swap(&$a, &$b) {
    list($a,$b) = [$b, $a];
}

$a = 1;
$b = 2;

swap($a, $b);
var_dump($a, $b);
// int(2)
// int(1)