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

Viewed   85 times

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.

1

### 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:

• `swap1()` = scored approximate average of 0.19 seconds.
• `swap2()` = scored approximate average of 0.42 seconds.
• `swap3()` = scored approximate average of 0.16 seconds. Winner!
• `swap4()` = scored approximate average of 0.73 seconds.

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

### Note

• `swap2()` and `swap4()` are always slower than the other ones because of the function call.
• `swap1()` and `swap3()` both performance speed are very similar, but most of the time `swap3()` is slightly faster.
• Warning: `swap1()` works only with numbers!
Monday, October 17, 2022

5

Implode with

``````serialize(\$array);
``````

Explode with

``````unserialize(\$array);
``````
Saturday, December 3, 2022

4

Recursive functions are OK - but dangerous if you aren't sure you know what you are doing. If there is any chance that a function will end up in a recursive loop (where it keeps calling itself over and over) you will either time out, run out of memory or cause a zombie apocalypse.

Think of recursive calls as a really, really sharp knife - in the hands of an experienced chef, it's a match made in heaven, in the hands of the dishwasher, it is a lost finger waiting to happen.

PHP tries to play nice, and limits a recursive depth to 100 by default (though this can be changed) but for almost all cases, if your recursive depth gets to 100, the accident has already happened and PHP reacts by stopping any additional pedestrians from wandering into traffic. :)

Tuesday, September 13, 2022

5

`func_num_args`

Gets the number of arguments passed to the function.

Here is an example taken right from the link above,

``````<?php
function foo()
{
\$numargs = func_num_args();
echo "Number of arguments: \$numargsn";
}

foo(1, 2, 3);
?>
``````

Which outputs,

``````Number of arguments: 3
``````
Monday, August 29, 2022

4

Yes, it's called `array_count_values()`.

``````\$array = array(5, 5, 2, 1);
\$counts = array_count_values(\$array); // Array(5 => 2, 2 => 1, 1 => 1)
``````
Friday, September 16, 2022