看板 PHP 關於我們 聯絡資訊
大家好,小弟有個關於陣列儲存的問題想請教。 我想把每次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
mervynW:mysql_fetch_assoc[$result] ?? mysql_fetch_assoc() ?? 04/24 12:03
sweetjp6:那邊寫錯了@@" 04/24 12:07
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 12:08)
kuAIpAI:http://0rz.tw/9y2Nc 用這篇教的應該可以解決吧? 04/24 12:22
sweetjp6:有想過用array_merge,但因為看到的例子都是屬於靜態,而 04/24 12:34
sweetjp6:我的問題應該是屬於動態的,所以自己以為不適用。還是 04/24 12:36
sweetjp6:ku大可以稍微指點一下呢? 04/24 12:36
chrisQQ:你的 $j 每次都 = 0 04/24 12:41
chrisQQ:疑,請忽略我,我沒看清楚- -" 04/24 12:42
chrisQQ:動態一樣可以 array_merge 04/24 12:43
sweetjp6:請教一下chris,動態怎麼merge呢?可否提供例子,感謝。 04/24 12:50
sweetjp6:剛看了一下,array_merge似乎會把內容改為數字,但我陣列 04/24 12:51
sweetjp6:的值事實上是字串,這樣應該不適用吧! 04/24 12:52
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 12:54)
kerash:你 $alldrama[0]['action'] 內容是DB抓出來的還是現有的? 04/24 12:53
sweetjp6:從DB抓出來的 04/24 12:54
kerash:你要不要 echo 看看 $alldrama[$i] 會是甚麼? 04/24 12:56
kerash:另外 $alldrama[$i] 後面少個 . 連接 04/24 13:07
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 13:12)
sweetjp6:我有echo確定過$alldrama的內容,的確是我要的 04/24 13:13
chrisQQ:不就是靜態怎麼 merge 動態就一樣嘛@@ 你取出的值就已經 04/24 13:17
chrisQQ:變成靜態 array 了不是? 04/24 13:17
kerash:下面的 $alldrama[0][action] 不是指 $mergeDt1[0] ? 04/24 13:19
kerash:你的 alldrama 算是二維陣列,如下一篇回覆的一樣 04/24 13:20
kerash:如果是 echo $alldrama[$i] 只會印 Array 才對 04/24 13:20
kerash:另外 array merge 應該會保留原始的內容,就算是數字也可以 04/24 13:22
kerash:轉成字串,應該不會不能滿足你的要求 04/24 13:22
sweetjp6:對於array_merge會有這樣的認知是因為看到上面版友給的 04/24 13:26
sweetjp6:連結中的一句話: 只能用在 Array 的 Merge, 若array與字 04/24 13:28
sweetjp6:串相加,會出現Unsupported operand types的錯誤訊息。 04/24 13:28
sweetjp6:但這應該是我誤解了。 04/24 13:29
kerash:噢,這個在 array_merge有提到(之前我也有被版友提醒) 04/24 13:29
kerash:因為 array_merge 不會判斷類型,所以建議之前先(array)轉 04/24 13:29
PretenderY:先不論array_merge,你的第二個迴圈真的很有問題 04/24 13:37
PretenderY:因為你用$mergeDtl[],外部跑第二次取到的值會塞在後面 04/24 13:38
kerash:另外如果 mergeDtl 不用來保留,那就可以不用用陣列 04/24 13:38
kerash:直接 assign 就好 04/24 13:38
PretenderY:但是你的$j卻是從0開始,導致跑第二次的時候, 04/24 13:39
PretenderY:加進$action的值會從$mergeDtl的開頭開始取值 04/24 13:39
$mergeDtl[]的確是用來作保留的。我希望每次外部取到的值都可以循序存下去。 Pre大說的應該是就是我的盲點了。 如果我希望可以不要每次都從$mergeDtl[]開頭取值,應該怎麼修正比較好呢? ※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 13:43)
gname:我的壞習慣是在第二個迴圈外丟個計數變數..= =" 04/24 13:47
kerash:我的保留是指在這個程序完畢後還會不會用到 mergeDtl 04/24 13:49
PretenderY:板主說的正是我想講的,但非必要我自己是不會這樣寫 04/24 13:49
kerash:如果不用的話可以不必存陣列,存了只是比較麻煩 04/24 13:50
sweetjp6:在第二次的for迴圈之後,的確不會再用到mergeDrl。所以我 04/24 13:52
sweetjp6:可以直接用assign就達到我要的效果嗎? 04/24 13:52
kerash:不能解決這個問題,但至少你不用去考慮陣列位置的問題 04/24 13:53
kerash:不過這也是目前最大的問題就是了 囧~ 04/24 13:54
sweetjp6:我大概知道問題在哪了,先來試試看。感謝大家的熱心指點 04/24 13:56