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.
<?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); ?>
© 20072024 XoaX.net LLC. All rights reserved.