2016-03-04 90 views
1

我有一个原始数组正在被修改,如:保持数组需要修改的拷贝/克隆数

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的$阵列将在功能 '测试' 末端[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的$阵列$ anotherArray将现是[4,5,6]而不是$ array = [2,3,4]和$ anotherArray = [3,4,5],这是我的意图。

还是我完全误导了这里?

+1

'$ myArray'在你的例子中永远不会改变。 '$ array'作为修改后的副本从函数返回。 – AbraCadaver

+0

可能你想'private function modifyArray(&$ paramArray,$ someValue)' - 注意&paramArray之前 –

回答

1

误导在这里。 modifyArray内部的变量$paramArray仅存在于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] 
+0

谢谢 - 以及评论 - 这对我来说很重要。 – LBA