关于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);

我就是不明白为什么引用赋值会失效。。
展开
 我来答
zaq718383734
推荐于2018-04-09 · 超过41用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:90.7万
展开全部
试试这样

$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 中传引用
caiaolin
2013-01-25 · TA获得超过664个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:450万
展开全部
foreach($this->contracts as $k => &$v){}
你这里用了个&$v``一直指向这个地址·····去掉它··或者用楼上的方法··
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luocongjay
2013-01-25 · TA获得超过949个赞
知道小有建树答主
回答量:1382
采纳率:33%
帮助的人:427万
展开全部
$v["khdq"] = $this->getNameById($v["khdq"],"khdq");
换成
$this->contracts[$k]["khdq"] = $this->getNameById($v["khdq"],"khdq");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式