作者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