![]() | 1 yesmeck 2011-03-16 12:49:31 +08:00 这是一个提醒而不是一个错误。 因为你的循环出来的$a里面没有带c这个key的值。 $query = "select a ,b from a_table "; 这里只有a,b两个key可以用。 |
![]() | 2 yesmeck 2011-03-16 12:52:35 +08:00 哦,还有这句 foreach ($lists as $e) { $e['c'] = 1; } 这样$lists里面并不会多1这个值, 要这样 foreach ($lists as $key => $e) { $lists[$key]['c'] = 1; } |
![]() | 3 huacnlee 2011-03-16 13:59:50 +08:00 咋开始学PHP了啊 |
![]() | 4 yaocaptain OP @yesmeck 恩,我试了一下你的方法,果然'c'这个索引插进去了。然后我改了一下: foreach ($lists as $key => $e) { //$lists[$key]['c'] = 1; $e['c']=1; } 结果却没有插进去。$e应该等于$lists[$key]的啊?然后我又测了一下$e==$lists[$key],它们是相等的。而且$lists并不是一个关联数组,应该用这个foreach($lists as $e)的语句提取元素吧。。。是不是语法在这里有特殊的地方,还是我有地方理解错了? |
![]() | 5 benzhe 2011-03-16 16:01:38 +08:00 @yaocaptain $e 是$lists[$key] 的值 |
![]() | 6 arikado 2011-03-16 16:28:57 +08:00 试试@@ foreach($lists as &$e){ $e['c']=1; } |
![]() | 7 yesmeck 2011-03-16 16:31:51 +08:00 |
![]() | 8 yesmeck 2011-03-16 16:35:21 +08:00 额,= =@arikado 我说错了 |
![]() | 10 yaocaptain OP |
![]() | 12 aligo 2011-03-16 16:51:35 +08:00 用array_map,通过FP方式来解决这个问题 $lists = array_map(function($e){ $e['c']=1; return $e; }, $lists); 无污染无副作用,不过用php来写这个实在太不美观了 还是应该造个php代码生成器 |
![]() | 13 yaocaptain OP |
![]() | 14 yaocaptain OP @aligo 哈哈有同感!$号敲得我烦死了! |
![]() | 15 arikado 2011-03-16 17:08:01 +08:00 @yaocaptain 你这段foreach后面是这样($c as $e)而不是($c as &$e) ? 没有漏掉"&" ? |
![]() | 16 aligo 2011-03-16 17:08:48 +08:00 虽然php的垃圾回收挺不靠谱的,不过php脚本的执行通常是随着http请求结束 所以尽可能不要用引用传递什么的比较好,对于变量每次变更,按照php默认做法,都指向一个新的引用比较好 不过php实在太不美观,缺乏表现力,从这个常用的array_map就可以看出-A- 不知道楼主有兴趣没:http://v2ex.appspot.com/t/9646 |
![]() | 17 aligo 2011-03-16 17:12:58 +08:00 楼主需求应该可以写成 lists = lists.map(_['c']=1) 美观直接一目了然,可惜只是我的YY |
![]() | 18 aligo 2011-03-16 17:16:01 +08:00 另外,连接在php中数据库应该用pdo比较好,fetchAll返回就是数组,不用手动遍历再push |
![]() | 19 yaocaptain OP @arikado - - 不好意思看漏了...多谢提醒! |
![]() | 20 yaocaptain OP |
![]() | 21 yokle 2011-05-04 11:25:59 +08:00 干嘛不直接 fetch_array 出来就是数组。 |