关于PHP中foreach循环修改数组值失效的问题
classIndexActionextendsAction{……//$this->contracts是一个数据库查询后返回的集合$this->contracts=……;/...
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);
我就是不明白为什么引用赋值会失效。。 展开
……
//$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);
我就是不明白为什么引用赋值会失效。。 展开
3个回答
展开全部
试试这样
$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 中传引用
$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 中传引用
展开全部
foreach($this->contracts as $k => &$v){}
你这里用了个&$v``一直指向这个地址·····去掉它··或者用楼上的方法··
你这里用了个&$v``一直指向这个地址·····去掉它··或者用楼上的方法··
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$v["khdq"] = $this->getNameById($v["khdq"],"khdq");
换成
$this->contracts[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq");
换成
$this->contracts[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询