Php: what's the difference between $var and &$var?

Olivier Pons picture Olivier Pons · Dec 29, 2010 · Viewed 13.3k times · Source

What is the difference between

foreach ($my_array as $my_value) {
}

And:

foreach ($my_array as &$my_value) {
}

?

May I ask you to give me two real-world examples of when to use one and when you use the other?

Answer

Sampson picture Sampson · Dec 29, 2010

The first example creates a copy of the value, whereas the second uses a reference to the original value. So after the first foreach runs, the original array is still untouched. After the second foreach the original array could have been modified since it was handled by reference.

Some native PHP functions already work this way, such as shuffle() which rearranges the contents of your array. You'll notice that this function doesn't return an array, you just call it:

$myArray = array('foo', 'bar', 'fizz', 'buzz');
shuffle( $myArray );
// $myArray is now shuffled

And it works its magic since it works with the array by reference rather than creating a copy of it.

Then there are functions that don't pass anything by reference but rather deal with a copy of the original value, such as ucwords() which returns the new resulting string:

$myString = "hello world";
$myString = ucwords( $myString );
// $myString is now capitalized

See Passing by Reference.