class IndexAction extends Action{ …… //$this->contracts是一个数据库查询后返回的集合 $this->contracts = ……; //请看以下这个foreach循环 foreach($this->contracts as $k => &$v){ $v["khdq"] = $this->getNameById($v["khdq"],"khdq"); } //我测试过,getNameById这个函数是能够输出正确的值的 //但是为什么在这个循环结束后输出$this->contracts依然是循环修改之前的值呢? private function getNameById($id,$table){……} ……}这是我的临时解决方案,这样就可以:$tmp_data = $this->contracts;foreach($this->contracts as $k => $v){ //$v["khdq"] = $this->getNameById($v["khdq"],"khdq");(上面的改成$k=>&$v) //或者:$this->contracts[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq"); //上面这两句代码都是不行的,最后$this->contracts的值没有改变,为什么?? $tmp_data[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq");}$this->contracts = $tmp_data;unset($tmp_data);我就是不明白为什么引用赋值会失效。。
试试这样$tmp_data = $this->contracts;foreach($tmp_data as $k => & $v){ $v["khdq"] = $this->getNameById($v["khdq"],"khdq");}$this->contracts = $tmp_data;unset($tmp_data);foreach($this->contracts as $k => &$v){ 这样不成功是因为 foreach 此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。 就是说必须是变量才能在foreach 中传引用
$v["khdq"] = $this->getNameById($v["khdq"],"khdq");换成$this->contracts[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq");