我有以下函数取消设置数组元素的属性。在此过程中,它也会从原始数组中取消设置。
有没有办法在不影响原始数组的情况下更新数组元素?
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
答案 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.
}
}
}