Tay*_*lor 70 php swap function
比如我说......
$var1 = "ABC"
$var2 = 123
Run Code Online (Sandbox Code Playgroud)
在某些条件下,我想像这样交换两个......
$var1 = 123
$var2 = "ABC"
Run Code Online (Sandbox Code Playgroud)
是否有一个PHP函数来执行此操作,而不是必须创建第三个变量来保存其中一个值,然后重新定义每个值,如此...
$var3 = $var1
$var1 = $var2
$var2 = $var3
Run Code Online (Sandbox Code Playgroud)
对于这样一个简单的任务,无论如何它使用第三个变量可能更快,如果我真的想,我总是可以创建自己的函数.只是想知道这样的东西是否存在?
更新:使用第三个变量或将其包装在函数中是最佳解决方案.它干净简单.我出于好奇而问了这个问题,选择的答案是"下一个最好的选择".只需使用第三个变量.
evi*_*iko 100
没有内置功能.
正如许多人提到的,有3种方法可以做到这一点:
function swap1(&$x, &$y) {
// Warning: works correctly with numbers ONLY!
$x ^= $y ^= $x ^= $y;
}
function swap2(&$x, &$y) {
list($x,$y) = array($y, $x);
}
function swap3(&$x, &$y) {
$tmp=$x;
$x=$y;
$y=$tmp;
}
function swap4(&$x, &$y) {
extract(array('x' => $y, 'y' => $x));
}
Run Code Online (Sandbox Code Playgroud)
我在1000次迭代的for循环中测试了3种方法,以找到它们中最快的:
为了可读性/可写性,IMO我发现swap3比其他2个功能更好.
2017年更新:
Pek*_*ica 80
我不知道有什么功能,但Pete Graham有一个单行礼貌:
list($a,$b) = array($b,$a);
Run Code Online (Sandbox Code Playgroud)
但是,从维护的角度来看,我不确定自己是否喜欢这个,因为理解它并不是很直观.
另外,正如@Paul Dixon指出的那样,它不是非常有效,而且比使用临时变量更昂贵.可能在一个非常大的循环中注意到.
但是,无论如何,这种情况对我来说有点不对.如果你想讨论它:你需要什么?
Paw*_*iel 29
是的,现在有类似的东西.它不是一个函数,而是一个语言结构(自PHP 7.1起可用).它允许这种简短的语法:
[$a, $b] = [$b, $a];
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅"数组解构分配的方括号语法".
Paw*_*iel 16
也可以使用旧的XOR技巧(但它只适用于整数,并且它不会使代码更容易阅读..)
$a ^= $b ^= $a ^= $b;
Run Code Online (Sandbox Code Playgroud)
是的,试试这个:
// Test variables
$a = "content a";
$b = "content b";
// Swap $a and $b
list($a, $b) = array($b, $a);
Run Code Online (Sandbox Code Playgroud)
这让我想起了python,这样的语法完全有效:
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
遗憾的是你不能在PHP中完成上述操作......
小智 6
对于数字:
$a = $a+$b;
$b = $a-$b;
$a = $a-$b;
Run Code Online (Sandbox Code Playgroud)
工作:
设$ 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!)