Core PHP

Array Values Versus References

Unlike objects, arrays tend to be passed by value rather than by reference. For this reason, copies of arrays are frequently made unintentionally. To avoid this, references can be used.

Below, we demonstrate how to pass an array by value and reference into a function, a foreach loop, and an assignment operator, and return them from a function.

ArrayValuesVersusReferences.php

<?php

function PassByValue($iaArray) {
  $iaArray['zero'] = 2;
}

function PassByReference(&$iaArray) {
  $iaArray['zero'] = 2;
}

function ReturnPassByReference(&$iaArray) {
  return $iaArray;
}

function &ReturnReferencePassByReference(&$iaArray) {
  return $iaArray;
}

function Display(&$iaArray) {
  echo '<pre>';
  print_r($iaArray);
  echo '</pre>';
}

$iaValues = ['zero' => 0, 'one' => 1];

// Display the initial array
echo '<p>The initial array</p>';
Display($iaValues);

// Pass an array into a function by value and by reference
echo '<p>Passing arrays into functions</p>';
PassByValue($iaValues);
Display($iaValues);

PassByReference($iaValues);
Display($iaValues);

// Foreach loops on an array with access by value and by reference
// Access elements in a foreach loop by value
echo '<p>Passing arrays into foreach loops</p>';
foreach($iaValues as $iEntry) {
  $iEntry = 5;
}
Display($iaValues);

// Access elements in a foreach loop by reference
foreach($iaValues as &$iEntry) {
  $iEntry = 5;
}
Display($iaValues);

// Array Assignments by value and by reference
// Assignment by value
echo '<p>Passing arrays into the assignment operator</p>';
$iaAssignedArray = $iaValues;
$iaAssignedArray['zero'] = 100;
Display($iaValues);

// Assignment by reference
$iaAssignedArray = &$iaValues;
$iaAssignedArray['zero'] = 100;
Display($iaValues);

// Returning an array by value versus by reference
// Return by value
echo '<p>Returning arrays from functions</p>';
$iaReturnedArray = ReturnPassByReference($iaValues);
$iaReturnedArray['zero'] = 3;
Display($iaValues);

// Return by reference
$iaReturnedArray = &ReturnReferencePassByReference($iaValues);
$iaReturnedArray['zero'] = 3;
Display($iaValues);

?>
 

Output

 
 

© 2007–2024 XoaX.net LLC. All rights reserved.