phpfunctionswap

Is there a PHP function for swapping the values of two variables?


Say for instance I have ...

$var1 = "ABC"
$var2 = 123

and under certain conditions I want to swap the two around like so...

$var1 = 123
$var2 = "ABC"

Is there a PHP function for doing this rather than having to create a 3rd variable to hold one of the values then redefining each, like so...

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

For such a simple task its probably quicker using a 3rd variable anyway and I could always create my own function if I really wanted to. Just wondered if something like that exists?

Update: Using a 3rd variable or wrapping it in a function is the best solution. It's clean and simple. I asked the question more out of curiosity and the answer chosen was kind of 'the next best alternative'. Just use a 3rd variable.


Solution

  • TL;DR

    There isn't a built-in function. Use swap3() as mentioned below.

    Summary

    As many mentioned, there are multiple ways to do this, most noticable are these 4 methods:

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

    I tested the 4 methods under a for-loop of 1000 iterations, to find the fastest of them:

    And for readability, I find swap3() is better than the other functions.

    Note