我有一个原始数组,正在修改,例如。
private function test()
{
$myArray = array(1,2,3);
$array = $this->modifyArray($myArray, 1);
}
private function modifyArray($paramArray, $someValue)
{
foreach ($paramArray as &$item) {
$item += $someValue;
}
return $paramArray;
}
根据我的理解, $ myArray 和 $ array 将在功能结束时[2,3,4]测试'。
但是如果我想重新执行此操作并再次调用modifyArray,那么正确的方法是什么:
private function test()
{
$myArray = array(1,2,3);
$array = $this->modifyArray($myArray, 1);
// new call
$anotherArray = $this->modifyArray($myArray, 2);
}
根据我的理解 $ myArray , $ array 和 $ anotherArray 现在将是[4,5,6]而不是$ array = [2,3,4]和$ anotherArray = [3,4,5]这是我的意图。
或者我完全被误入歧途?
答案 0 :(得分:1)
你 在这里被误导了。 $paramArray
内的变量modifyArray
仅存在于modifyArray
内,不会被修改。它只返回更改后的数组。这意味着:
$myArray = array(1,2,3); // will still be [1,2,3]
$array = $this->modifyArray($myArray, 1); // $array will be [2,3,4], because [1,2,3] is passed
// new call
$anotherArray = $this->modifyArray($myArray, 2); // $anotherArray will be [3,4,5] because [1,2,3] is passed
如果您想要其他行为,则应将$paramArray
与&
链接到已传递的数组:
private function modifyArray(&$paramArray, $someValue)
现在的结果是:
$myArray = array(1,2,3); // will still be [1,2,3]
$array = $this->modifyArray($myArray, 1); // $array will be [2,3,4], because [1,2,3] is passed and $myArray is now [2,3,4]
// new call
$anotherArray = $this->modifyArray($myArray, 2); // $anotherArray will be [4,5,6] because [2,3,4] is passed and $myArray is now [4,5,6]