2016-03-04 91 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