[請益] 請教陣列存取的問題

看板PHP作者 (水餃)時間13年前 (2012/04/24 11:59), 編輯推噓7(7038)
留言45則, 7人參與, 最新討論串1/6 (看更多)
大家好,小弟有個關於陣列儲存的問題想請教。 我想把每次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

04/24 12:03, , 1F
mysql_fetch_assoc[$result] ?? mysql_fetch_assoc() ??
04/24 12:03, 1F

04/24 12:07, , 2F
那邊寫錯了@@"
04/24 12:07, 2F
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 12:08)

04/24 12:22, , 3F
http://0rz.tw/9y2Nc 用這篇教的應該可以解決吧?
04/24 12:22, 3F

04/24 12:34, , 4F
有想過用array_merge,但因為看到的例子都是屬於靜態,而
04/24 12:34, 4F

04/24 12:36, , 5F
我的問題應該是屬於動態的,所以自己以為不適用。還是
04/24 12:36, 5F

04/24 12:36, , 6F
ku大可以稍微指點一下呢?
04/24 12:36, 6F

04/24 12:41, , 7F
你的 $j 每次都 = 0
04/24 12:41, 7F

04/24 12:42, , 8F
疑,請忽略我,我沒看清楚- -"
04/24 12:42, 8F

04/24 12:43, , 9F
動態一樣可以 array_merge
04/24 12:43, 9F

04/24 12:50, , 10F
請教一下chris,動態怎麼merge呢?可否提供例子,感謝。
04/24 12:50, 10F

04/24 12:51, , 11F
剛看了一下,array_merge似乎會把內容改為數字,但我陣列
04/24 12:51, 11F

04/24 12:52, , 12F
的值事實上是字串,這樣應該不適用吧!
04/24 12:52, 12F
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 12:54)

04/24 12:53, , 13F
你 $alldrama[0]['action'] 內容是DB抓出來的還是現有的?
04/24 12:53, 13F

04/24 12:54, , 14F
從DB抓出來的
04/24 12:54, 14F

04/24 12:56, , 15F
你要不要 echo 看看 $alldrama[$i] 會是甚麼?
04/24 12:56, 15F

04/24 13:07, , 16F
另外 $alldrama[$i] 後面少個 . 連接
04/24 13:07, 16F
※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 13:12)

04/24 13:13, , 17F
我有echo確定過$alldrama的內容,的確是我要的
04/24 13:13, 17F

04/24 13:17, , 18F
不就是靜態怎麼 merge 動態就一樣嘛@@ 你取出的值就已經
04/24 13:17, 18F

04/24 13:17, , 19F
變成靜態 array 了不是?
04/24 13:17, 19F

04/24 13:19, , 20F
下面的 $alldrama[0][action] 不是指 $mergeDt1[0] ?
04/24 13:19, 20F

04/24 13:20, , 21F
你的 alldrama 算是二維陣列,如下一篇回覆的一樣
04/24 13:20, 21F

04/24 13:20, , 22F
如果是 echo $alldrama[$i] 只會印 Array 才對
04/24 13:20, 22F

04/24 13:22, , 23F
另外 array merge 應該會保留原始的內容,就算是數字也可以
04/24 13:22, 23F

04/24 13:22, , 24F
轉成字串,應該不會不能滿足你的要求
04/24 13:22, 24F

04/24 13:26, , 25F
對於array_merge會有這樣的認知是因為看到上面版友給的
04/24 13:26, 25F

04/24 13:28, , 26F
連結中的一句話: 只能用在 Array 的 Merge, 若array與字
04/24 13:28, 26F

04/24 13:28, , 27F
串相加,會出現Unsupported operand types的錯誤訊息。
04/24 13:28, 27F

04/24 13:29, , 28F
但這應該是我誤解了。
04/24 13:29, 28F

04/24 13:29, , 29F
噢,這個在 array_merge有提到(之前我也有被版友提醒)
04/24 13:29, 29F

04/24 13:29, , 30F
因為 array_merge 不會判斷類型,所以建議之前先(array)轉
04/24 13:29, 30F

04/24 13:37, , 31F
先不論array_merge,你的第二個迴圈真的很有問題
04/24 13:37, 31F

04/24 13:38, , 32F
因為你用$mergeDtl[],外部跑第二次取到的值會塞在後面
04/24 13:38, 32F

04/24 13:38, , 33F
另外如果 mergeDtl 不用來保留,那就可以不用用陣列
04/24 13:38, 33F

04/24 13:38, , 34F
直接 assign 就好
04/24 13:38, 34F

04/24 13:39, , 35F
但是你的$j卻是從0開始,導致跑第二次的時候,
04/24 13:39, 35F

04/24 13:39, , 36F
加進$action的值會從$mergeDtl的開頭開始取值
04/24 13:39, 36F
$mergeDtl[]的確是用來作保留的。我希望每次外部取到的值都可以循序存下去。 Pre大說的應該是就是我的盲點了。 如果我希望可以不要每次都從$mergeDtl[]開頭取值,應該怎麼修正比較好呢? ※ 編輯: sweetjp6 來自: 140.117.164.148 (04/24 13:43)

04/24 13:47, , 37F
我的壞習慣是在第二個迴圈外丟個計數變數..= ="
04/24 13:47, 37F

04/24 13:49, , 38F
我的保留是指在這個程序完畢後還會不會用到 mergeDtl
04/24 13:49, 38F

04/24 13:49, , 39F
板主說的正是我想講的,但非必要我自己是不會這樣寫
04/24 13:49, 39F

04/24 13:50, , 40F
如果不用的話可以不必存陣列,存了只是比較麻煩
04/24 13:50, 40F

04/24 13:52, , 41F
在第二次的for迴圈之後,的確不會再用到mergeDrl。所以我
04/24 13:52, 41F

04/24 13:52, , 42F
可以直接用assign就達到我要的效果嗎?
04/24 13:52, 42F

04/24 13:53, , 43F
不能解決這個問題,但至少你不用去考慮陣列位置的問題
04/24 13:53, 43F

04/24 13:54, , 44F
不過這也是目前最大的問題就是了 囧~
04/24 13:54, 44F

04/24 13:56, , 45F
我大概知道問題在哪了,先來試試看。感謝大家的熱心指點
04/24 13:56, 45F
文章代碼(AID): #1FbYKhA3 (PHP)
文章代碼(AID): #1FbYKhA3 (PHP)