有一个PHP函数来交换两个variables的值吗?

说例如我有…

$var1 = "ABC" $var2 = 123 

在某些条件下,我想换成两个像这样…

 $var1 = 123 $var2 = "ABC" 

有没有一个PHP函数做这个,而不是必须创build一个第三个variables来保存一个值然后重新定义每个,就像这样…

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

对于这样一个简单的任务,它可能会更快地使用第三个variables,我总是可以创build自己的function,如果我真的想。 只是想知道是否存在这样的事情?

更新:使用第三个variables或包装在一个函数是最好的解决scheme。 它干净简单。 我更好奇地问了这个问题,所select的答案是“下一个最好的select”。 只要使用第三个variables。

没有内置的function。

正如很多人所说,有三种方法可以做到这一点:

 function swap1(&$x,&$y) { $x ^= $y ^= $x ^= $y; } function swap2(&$x,&$y) { list($x,$y) = array($y,$x); } function swap3(&$x,&$y) { $tmp=$x; $x=$y; $y=$tmp; } 

我在1000次迭代的for循环下testing了3种方法,以find最快的方法:

  • swap1 =大约0.19秒的平均得分。
  • swap2 =大概平均0.42秒。
  • swap3 =大约平均0.16秒。

而为了可读性/可写性,IMO认为swap3比另外两个函数要好。

2017年更新:

  • 由于函数调用,swap2总是比其他的慢。
  • swap1和swap3两者的性能速度都非常相似,但swap3的大部分时间都稍快。
  • 警告: swap1只能使用数字!

我不知道这个function是什么,但是皮特·格雷厄姆 ( Pete Graham)提供了一个单线的提示:

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

但是从维护的angular度来看,我不确定我是否喜欢这个,因为它不是很直观的理解。

另外,正如@Paul Dixon指出的那样,效率不高,比使用临时variables更昂贵。 可能在一个非常大的循环中注意到。

不过,无论如何,这是必要的情况,我感到有点不对劲。 如果你想讨论它:你需要什么?

也可以使用旧的XOR技巧(但是它只能正确地处理整数,并且不会使代码更容易阅读。)

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

是的,试试这个 :

 // Test variables $a = "content a"; $b = "content b"; // Swap $a and $b list($a, $b) = array($b, $a); 

这让我想起python,这里的语法是完全有效的:

 a, b = b, a 

这是一个耻辱,你不能只是在PHP上面做…

是的,现在存在这样的事情。 这不是一个函数,而是一个语言结构(自PHP 7.1起可用)。 它允许这个简短的语法:

  [$a, $b] = [$b, $a]; 

有关更多详细信息,请参阅“数组解构赋值的方括号语法” 。

其他方式:

 $a = $b + $a - ($b = $a); 
 list($var1,$var2) = array($var2,$var1); 

这个更快,需要更less的内存。

 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 

工作示例: http : //codepad.viper-7.com/ytAIR4

对于数字:

 $a = $a+$b; $b = $a-$b; $a = $a-$b; 

加工:

让$ a = 10,$ b = 20。

$ a = $ a + $ b(现在,$ a = 30,$ b = 20)

$ b = $ a- $ b(现在,$ a = 30,$ b = 10)

$ a = $ a- $ b(现在,$ a = 20,$ b = 10 SWAPPED!)

这是另一种不使用临时或第三个variables的方法。

 <?php $a = "One - 1"; $b = "Two - 2"; list($b, $a) = array($a, $b); echo $a . $b; ?> 

如果你想使它成为一个function:

  <?php function swapValues(&$a, &$b) { list($b, $a) = array($a, $b); } $a = 10; $b = 20; swapValues($a, $b); echo $a; echo '<br>'; echo $b; ?> 

谢谢您的帮助。 我已经做成了一个PHP函数swap()

 function swap(&$var1, &$var2) { $tmp = $var1; $var1 = $var2; $var2 = $tmp; } 

代码示例可在以下位置find:

http://liljosh.com/swap-php-variables/

3个选项:

 $x ^= $y ^= $x ^= $y; //bitwise operators 

要么:

 list($x,$y) = array($y,$x); 

要么:

 $tmp=$x; $x=$y; $y=$tmp; 

我认为,第一个选项是最快的,需要较less的内存,但它不适用于所有types的variables。 (例如:只适用于长度相同的string)
无论如何,从任何angular度来看,这种方法都比算术方法好得多。
(算术:{$ a =($ a + $ b) – $ a; $ b =($ a + $ b) – $ b;} MaxInt问题,等等…)

function例如:

 function swap(&$x,&$y) { $x ^= $y ^= $x ^= $y; } function swap(&$x,&$y) { list($x,$y) = array($y,$x); } function swap(&$x,&$y) { $tmp=$x; $x=$y; $y=$tmp; } //usage: swap($x,$y); 

另一个简单的方法

 $a=122; $b=343; extract(array('a'=>$b,'b'=>$a)); echo '$a='.$a.PHP_EOL; echo '$b='.$b; 

是的,我知道有很多解决scheme可用,但这里是另一个。 你也可以使用parse_str()函数。 参考W3Schools PHP的parse_str()函数 。

 <?php $a = 10; $b = 'String'; echo '$a is '.$a; echo '....'; echo '$b is '.$b; parse_str("a=$b&b=$a"); echo '....After Using Parse Str....'; echo '$a is '.$a; echo '....'; echo '$b is '.$b; ?> 

DEMO

如果两个variables都是整数,则可以使用math方法:

 $a = 7; $b = 10; $a = $a + $b; $b = $a - $b; $a = $a - $b; 

好博客文章 – http://booleandreams.wordpress.com/2008/07/30/how-to-swap-values-of-two-variables-without-using-a-third-variable/

 <?php swap(50, 100); function swap($a, $b) { $a = $a+$b; $b = $a - $b; $a = $a - $b; echo "A:". $a; echo "B:". $b; } ?> 
 $a = 'ravi'; $b = 'bhavin'; $a = $b.$a; $b = substr($a,strlen($b),strlen($a)); $a = substr($a,0,strlen($a)-strlen($b)); echo "a=".$a.'<br/>'.'b='.$b; 

另一个答案

 $a = $a*$b; $b = $a/$b; $a = $a/$b; 
 $a=5; $b=10; $a=($a+$b)-$a; $b=($a+$b)-$b;