Re: [請益] mysql_fetch_array 取出的陣列數

看板PHP作者 (皮皮快跑)時間13年前 (2011/07/27 22:00), 編輯推噓5(504)
留言9則, 7人參與, 最新討論串2/9 (看更多)
※ 引述《ptt2000 (ptt20000)》之銘言: : 各位好 : 小弟因mysql_fetch_array取出的陣列數感到疑惑 : 我下的SQL為 : select A,B from test where C=1; : 在myadmin下確實找到AB這兩個值 : 但是使用$X = mysql_fetch_array後 : count($X) = 4 : 其中 : $X[0] = A : $X[1] = B : $X[2] = 空白 : $X[3] = 空白 : 請問搜尋兩個欄位,count後應該等於2 : 為什麼會等於4呢?? : 而且最後兩個還是空白的 : 請問是哪邊錯了呢?? : 感謝大大解惑... : 謝謝。 還是專文回您好了。 $row = mysql_fetch_row(); 就是按照欄位的順序以陣列從0開始的方式傳遞每一欄的資料。 基本而言這個習慣是針對其他語言轉過來的人而用的。 因為php的陣列是比較特立獨行在於他可以用「文字」做為陣列的索引名稱。 但事實上反過來說,習慣於使用欄位名稱做為取值的人可能就很不習慣這個做法。 取出來的是$row[0],$row[1]...... $row = mysql_fetch_assoc(); 就是按照欄位的名稱做為陣列的索引名稱。 習慣php以名稱取陣列名的人可能就很習慣這種用法。 取出來的是$row['name'],$row['address'],$row['sex'].....等 $row = mysql_fetch_object(); 將資料以欄位名稱做為資料物件的屬性名稱。 習慣於物件導向操作的人就會習慣這樣的模式。 當然啦!這個資料物件是程式產生的所以你除了屬性之外也沒辦法能對他做其他的事。 (比如讓這個資料物件提供方法這種事當然不行。) 不過php比較詭異的地方就是說……… foreach()除了可以解陣列……他連物件的屬性都可以解。 基本上不建議使用mysql_fetch_array()的原因即在於他是將 mysql_fetch_row()和mysql_fetch_assoc()兩種都取。 這麼一來在計算陣列或是用foreach去解的話等於是解兩倍的資料。 當然就容易發生一些不該發生的錯誤。 小知識: 資料類別的定義方式: <?php class row{} $row = new row; $row->name = 'sam'; $row->address = 'taipei'; $row->sex = 'male'; foreach($row as $key => $value){ echo "{$key} => {$value}<BR>"; } ?> 就會印出: name => sam address => taipei sex => male -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.131.235 ※ 編輯: tkdmaf 來自: 59.104.131.235 (07/27 22:02)

07/27 22:21, , 1F
你真的每次都令人很驚奇… XD
07/27 22:21, 1F

07/27 22:40, , 2F
感謝您詳細的解答 萬分感謝!
07/27 22:40, 2F

07/27 22:49, , 3F
給樓上,有些觀念試著多方求證會更好,別人說的不一定是對的
07/27 22:49, 3F

07/27 23:03, , 4F
所以樓上,有那邊寫錯了可否請您指正是幸?
07/27 23:03, 4F
※ 編輯: tkdmaf 來自: 59.104.131.235 (07/27 23:06)

07/27 23:08, , 5F
基本上敝人打字很快,所以會有心不到手到,請見諒。
07/27 23:08, 5F

07/28 00:00, , 6F
很清楚的解說呢!
07/28 00:00, 6F

07/28 03:08, , 7F
釐清了模糊很久的觀念,大推
07/28 03:08, 7F

07/28 08:56, , 8F
喔喔 幫你推一下
07/28 08:56, 8F

07/28 13:41, , 9F
讚喔 好文章
07/28 13:41, 9F
文章代碼(AID): #1EC1dkzz (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 2 之 9 篇):
文章代碼(AID): #1EC1dkzz (PHP)