保留需要多次修改的数组的复制/克隆

时间:2016-03-04 15:46:54

标签: php arrays

我有一个原始数组,正在修改,例如。

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]这是我的意图。

或者我完全被误入歧途?

1 个答案:

答案 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]