是否有 PHP 函数用于交换两个变量的值?

2022-08-30 08:06:31

例如,假设我有...

$var1 = "ABC"
$var2 = 123

在某些情况下,我想像这样交换两者......

$var1 = 123
$var2 = "ABC"

是否有PHP函数可以执行此操作,而不必创建第3个变量来保存其中一个值,然后重新定义每个值,就像这样......

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

对于这样一个简单的任务,无论如何使用第三个变量可能会更快,如果我真的想,我总是可以创建自己的函数。只是想知道是否存在这样的东西?

更新:使用第三个变量或将其包装在函数中是最佳解决方案。干净简洁。我问这个问题更多的是出于好奇,选择的答案是“下一个最佳选择”。只需使用第三个变量。


答案 1

TL;DR

没有内置函数。使用如前所述。swap3()

总结

正如许多人所提到的,有多种方法可以做到这一点,最值得注意的是以下4种方法:

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));
}

我在1000次迭代的for循环下测试了这4种方法,以找到其中最快的方法:

  • swap1()= 平均得分约为 0.19 秒。
  • swap2()= 平均得分约为 0.42 秒。
  • swap3()= 得分约为 0.16 秒。胜利者!
  • swap4()= 得分约为 0.73 秒。

为了提高可读性,我发现它比其他函数更好。swap3()

注意

  • swap2()并且由于函数调用,它们总是比其他的慢。swap4()
  • swap1()两者的性能速度非常相似,但大部分时间都稍微快一些。swap3()swap3()
  • 警告:仅适用于数字!swap1()

答案 2

据我所知,没有一个功能,但有一句话由皮特·格雷厄姆(Pete Graham)提供

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

但是,不确定我是否喜欢从维护的角度来看,因为它并不是真正直观地理解。

此外,正如@Paul Dixon所指出的那样,它不是很有效,并且比使用临时变量更昂贵。在一个非常大的循环中可能值得注意。

但是,无论如何,这是必要的情况对我来说有点不对劲。如果你想讨论它:你需要这个做什么?


推荐