2012-01-13 161 views
2

這一個真的讓我困惑,所以謝謝你的幫助。我試圖輸出一個SQL結果集的值,但foreach循環似乎是迭代兩次,然後遞增數組索引。這樣,如果我的DB行持有連續的整數1,2,3,4,5,則foreach循環的輸出爲1,1,2,2,3,3,4,4,5,5。看不到原因。代碼如下。PHP的foreach循環只增加一次每隔一個迭代

$result = mysql_query("SELECT * FROM Test"); 

echo "<table border=1><tr></tr>"; 

While($row = mysql_fetch_array($result)) 
{ 
    echo "<tr>"; 
    foreach($row as $value) 
    { 
     echo "<td>" . $value . "</td>"; 
    } 
    echo "</tr><tr>"; 
    for($x=0;$x<5;$x++) 
    { 
     echo "<td>" . $row[$x] . "</td>"; 
    } 
    echo "</tr>"; 
} 

之後爲了調試而引發第二個for循環,以確保該數組實際上不包含每個值的兩個實例。但是這個循環輸出如預期的那樣:1,2,3,4,5。有任何想法嗎?謝謝。

+0

Seing如您有這樣的煩惱,我是ld建議使用mysqli函數來代替,所以在你的情況下,你不需要在foreach循環中引用行,而是在你通過它的時候使用每一行。只是一個建議。 – Andy 2012-01-13 03:49:23

回答

4

默認情況下,mysql_fetch_array的第二個參數設置爲MYSQL_FETCH_BOTH,它將在索引下注冊每個值以及列的名稱。供應MYSQL_FETCH_NUM只得到數字索引:

while($row = mysql_fetch_array($result, MYSQL_FETCH_NUM)) { 
... 
+0

謝謝,這非常有幫助。 – dgeare 2012-01-13 16:01:46

0

mysql_fetch_array使用mysql結果作爲鍵的列名返回一個關聯數組,但它也使他們通過列號訪問,因此該行:

的Mysql COL:A | B | C Mysql的VAL:1 | 2 | 3

將返回一個陣列看起來像這樣通過mysql_fetch_array函數去後:

array(
    'A'=>1, 
    0 =>1, 
    'B'=>2 
    1 =>2, 
    'C'=>3, 
    2 =>3 
) 

和foreach循環將通過定義和數字鍵(產生複製)

+0

謝謝你。數組插圖是最有用的。 – dgeare 2012-01-13 16:03:34

0

另一種選擇是做一個foreach循環調用兩個鍵和值進行迭代。

foreach($row as $key=>$value) 
+0

不,那仍然枚舉所有的鍵,因此每個單元格兩次。 – phihag 2012-01-13 03:52:43

+0

很高興知道。我一直在使用它,並沒有遇到任何問題。感謝您指出了這一點。 – kwelch 2012-01-13 03:55:12

+0

對鍵和值使用'foreach'是非常好的練習,它根本沒有錯。但是OP不**需要整個陣列,儘管他沒有意識到這一點;) – phihag 2012-01-13 04:02:10

0

變化

While($row = mysql_fetch_array($result)) 
{ 
    echo "<tr>"; 
    foreach($row as $value) 
    { 
     echo "<td>" . $value . "</td>"; 
    } 
    echo "</tr><tr>"; 
    for($x=0;$x<5;$x++) 
    { 
     echo "<td>" . $row[$x] . "</td>"; 
    } 
    echo "</tr>"; 
} 

While($row = mysql_fetch_array($result)) 
{ 
    echo "<tr>"; 
    foreach($row as $value) 
    { 
     echo "<td>" . $value . "</td>"; 
    } 
    echo "</tr>"; 
} 

,告訴我你的輸出是什麼...

相關問題