作者sweetjp6 (水饺)
看板PHP
标题[请益] 请教阵列存取的问题
时间Tue Apr 24 11:59:37 2012
大家好,小弟有个关於阵列储存的问题想请教。
我想把每次for回圈的值都存到同一个阵列里,
但从结果看来却是第一个阵列的值一直重复。
以下是我的程式码:
$mergeDtl = array();
$action = array();
$brand = array();
for ($i=0 ; $i < sizeof($alldrama); $i++){
$take = "SELECT brand, action, sequence FROM robot where
screenplayname= '".$alldrama[$i]."' " ;
$result = mysql_query($take, $db_connect) ;
$many = mysql_num_rows($result) ;
for ($j=0 ; $j < $many ; $j++){
$mergeDtl[] = mysql_fetch_assoc($result) ;
$action[] = $mergeDtl[$j]['action'] ;
$brand[] = $mergeDtl[$j]['brand'] ;
}
}
举个例子 :
假设$alldrama有两个元素,$alldram[0], $alldrama[1]
且
$alldrama[0]['action'] = ["hi", "i", "am"] ;
$alldrama[1]['action'] = ["trying", "it"] ;
我预期的结果是:
$action[] = ["hi", "i", "am", "trying" ,"it"] ;
但实际的执行结果是
$action[] = ["hi", "i", "am", "hi" ,"i"] ;
看起来似乎是第二个for回圈出了问题,但我一直找不到问题所在
这个问题让我苦恼了很久,
请各位帮忙指点迷津,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.164.148
1F:→ mervynW:mysql_fetch_assoc[$result] ?? mysql_fetch_assoc() ?? 04/24 12:03
2F:→ sweetjp6:那边写错了@@" 04/24 12:07
※ 编辑: sweetjp6 来自: 140.117.164.148 (04/24 12:08)
4F:→ sweetjp6:有想过用array_merge,但因为看到的例子都是属於静态,而 04/24 12:34
5F:→ sweetjp6:我的问题应该是属於动态的,所以自己以为不适用。还是 04/24 12:36
6F:→ sweetjp6:ku大可以稍微指点一下呢? 04/24 12:36
7F:→ chrisQQ:你的 $j 每次都 = 0 04/24 12:41
8F:→ chrisQQ:疑,请忽略我,我没看清楚- -" 04/24 12:42
9F:→ chrisQQ:动态一样可以 array_merge 04/24 12:43
10F:→ sweetjp6:请教一下chris,动态怎麽merge呢?可否提供例子,感谢。 04/24 12:50
11F:→ sweetjp6:刚看了一下,array_merge似乎会把内容改为数字,但我阵列 04/24 12:51
12F:→ sweetjp6:的值事实上是字串,这样应该不适用吧! 04/24 12:52
※ 编辑: sweetjp6 来自: 140.117.164.148 (04/24 12:54)
13F:推 kerash:你 $alldrama[0]['action'] 内容是DB抓出来的还是现有的? 04/24 12:53
14F:→ sweetjp6:从DB抓出来的 04/24 12:54
15F:推 kerash:你要不要 echo 看看 $alldrama[$i] 会是甚麽? 04/24 12:56
16F:→ kerash:另外 $alldrama[$i] 後面少个 . 连接 04/24 13:07
※ 编辑: sweetjp6 来自: 140.117.164.148 (04/24 13:12)
17F:→ sweetjp6:我有echo确定过$alldrama的内容,的确是我要的 04/24 13:13
18F:→ chrisQQ:不就是静态怎麽 merge 动态就一样嘛@@ 你取出的值就已经 04/24 13:17
19F:→ chrisQQ:变成静态 array 了不是? 04/24 13:17
20F:→ kerash:下面的 $alldrama[0][action] 不是指 $mergeDt1[0] ? 04/24 13:19
21F:→ kerash:你的 alldrama 算是二维阵列,如下一篇回覆的一样 04/24 13:20
22F:→ kerash:如果是 echo $alldrama[$i] 只会印 Array 才对 04/24 13:20
23F:→ kerash:另外 array merge 应该会保留原始的内容,就算是数字也可以 04/24 13:22
24F:→ kerash:转成字串,应该不会不能满足你的要求 04/24 13:22
25F:→ sweetjp6:对於array_merge会有这样的认知是因为看到上面版友给的 04/24 13:26
26F:→ sweetjp6:连结中的一句话: 只能用在 Array 的 Merge, 若array与字 04/24 13:28
27F:→ sweetjp6:串相加,会出现Unsupported operand types的错误讯息。 04/24 13:28
28F:→ sweetjp6:但这应该是我误解了。 04/24 13:29
29F:推 kerash:噢,这个在 array_merge有提到(之前我也有被版友提醒) 04/24 13:29
30F:→ kerash:因为 array_merge 不会判断类型,所以建议之前先(array)转 04/24 13:29
31F:推 PretenderY:先不论array_merge,你的第二个回圈真的很有问题 04/24 13:37
32F:→ PretenderY:因为你用$mergeDtl[],外部跑第二次取到的值会塞在後面 04/24 13:38
33F:推 kerash:另外如果 mergeDtl 不用来保留,那就可以不用用阵列 04/24 13:38
34F:→ kerash:直接 assign 就好 04/24 13:38
35F:→ PretenderY:但是你的$j却是从0开始,导致跑第二次的时候, 04/24 13:39
36F:→ PretenderY:加进$action的值会从$mergeDtl的开头开始取值 04/24 13:39
$mergeDtl[]的确是用来作保留的。我希望每次外部取到的值都可以循序存下去。
Pre大说的应该是就是我的盲点了。
如果我希望可以不要每次都从$mergeDtl[]开头取值,应该怎麽修正比较好呢?
※ 编辑: sweetjp6 来自: 140.117.164.148 (04/24 13:43)
37F:→ gname:我的坏习惯是在第二个回圈外丢个计数变数..= =" 04/24 13:47
38F:推 kerash:我的保留是指在这个程序完毕後还会不会用到 mergeDtl 04/24 13:49
39F:→ PretenderY:板主说的正是我想讲的,但非必要我自己是不会这样写 04/24 13:49
40F:→ kerash:如果不用的话可以不必存阵列,存了只是比较麻烦 04/24 13:50
41F:→ sweetjp6:在第二次的for回圈之後,的确不会再用到mergeDrl。所以我 04/24 13:52
42F:→ sweetjp6:可以直接用assign就达到我要的效果吗? 04/24 13:52
43F:推 kerash:不能解决这个问题,但至少你不用去考虑阵列位置的问题 04/24 13:53
44F:→ kerash:不过这也是目前最大的问题就是了 囧~ 04/24 13:54
45F:→ sweetjp6:我大概知道问题在哪了,先来试试看。感谢大家的热心指点 04/24 13:56