未引用

时间:2017-08-29 15:03:47

标签: php

我有以下函数取消设置数组元素的属性。在此过程中,它也会从原始数组中取消设置。

有没有办法在不影响原始数组的情况下更新数组元素?

private function AccumulateRoles($Roles) {
    $RoleArray = [];
    foreach($Roles as $key => &$Role) {
        array_push($RoleArray, $Role);
        if(isset($RoleArray[$key]->children)) {
           unset($RoleArray[$key]->children); // This effects $Role also.
        }
    }
}

unset($RoleArray[$key]->children); //这也会影响$Role

我不想更改$Role

2 个答案:

答案 0 :(得分:1)

您正在使用foreach中的引用,因此请删除&,它会按您的意愿运作。

private function AccumulateRoles($Roles) {
    $RoleArray = [];
    foreach($Roles as $key => $Role) {
        array_push($RoleArray, $Role);
        if(isset($RoleArray[$key]->children)) {
           unset($RoleArray[$key]->children); // This effects $Role also.
        }
    }
}

这里有一个link来阅读有关参考资料的更多信息

答案 1 :(得分:0)

下面通过添加克隆来完美地为我工作

private function AccumulateRoles($Roles) {
    $RoleArray = [];
    foreach($Roles as $key => $Role) {
        array_push($RoleArray, clone $Role);
        if(isset($RoleArray[$key]->children)) {
           unset($RoleArray[$key]->children); // This effects $Role also.
        }
    }
}