有一个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:
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;
<?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;