php按数值复制数组元素,而不是引用
我有以下代码:
$data['x'] = $this->x->getResults(); $data['y'] = $data['x']; //some code here to modify $data['y'] //this causes (undesirably) $data['x] to be modified as well 我猜,由于$data的所有元素都是自己的引用,修改$data [‘y’]也会修改$data [‘x’] ..这不是我想要的.我想要$data [‘x’]保持不变.有没有办法取消引用这里的元素,以便我可以通过价值复制元素? 谢谢. 更新:$this-> x-> getResults();返回对象数组.所以我可以这样做:$data [‘x’] [0] – > date_create … 更新: $data['x'] = $this->x->getResults(); $data['y'] = $data['y']; foreach($data['x'] as $key=>$row) { $data['y'][$key]->some_attr = clone $row->some_attr; } 我要离开这里吗我不断得到一个“__clone方法调用非对象”错误.从阅读回复看来,我最好的选择是迭代每一个元素并克隆它(这是我正在尝试使用该代码..). 更新:刚刚解决了!在foreach循环里面,我只需要将行更改为: $data['y'][$key] = clone $row; 它的工作原理感谢大家的帮助.
您可以利用PHP将取消引用函数调用的结果.
这里有一些我鞭打的示例代码: $x = 'x'; $y = 'y'; $arr = array(&$x,&$y); print_r($arr); echo "<br/>"; $arr2 = $arr; $arr2[0] = 'zzz'; print_r($arr); print_r($arr2); echo "<br/>"; $arr2 = array_flip(array_flip($arr)); $arr2[0] = '123'; print_r($arr); print_r($arr2); 结果如下: Array ( [0] => x [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => zzz [1] => y ) Array ( [0] => 123 [1] => y ) 您可以看到在将$arr分配到$arr2期间使用array_flip()的结果导致后续更改为$arr2的差异,因为array_flip()调用强制执行取消引用. 它看起来不是很有效率,但是如果$this-> x-> getResults()返回一个数组,它可能会有效: $data['x'] = array_flip(array_flip($this->x->getResults())); $data['y'] = $data['x']; 参见this (unanswered) thread另一个例子. 如果返回的数组中的所有内容都是一个对象,那么复制对象的唯一方法是使用clone(),并且您必须遍历$data [‘x’]并将每个元素克隆到$data [‘y “]. 例: $data['x'] = $this->x->getResults(); $data['y'] = array(); foreach($data['x'] as $key => $obj) { $data['y'][$key] = clone $obj; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |