2013-12-18 103 views
1

我在數據庫上執行請求,返回array。我正在使用一個foreach循環來檢查值。mysqli_fetch_array()foreach循環重複

數據庫(僅1項)

id | field1 | field2 | field3 | field4 | field5 
---|--------|--------|--------|--------|-------- 
1 | value1 |   | value3 | value4 | value5 

PHP源代碼

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
$q = mysqli_query($mysqli, "SELECT * FROM my_table"); 

echo "<ul>"; 
    while($q = mysqli_fetch_array($q)) 
    { 
     foreach ($q as $key => $value) 
     { 
      if($value != NULL) 
      { 
       echo "<li>".$value . "</li>"; 

       // Line below used to show column name and corresponding value 
       //echo "<li><strong>{$key}</strong>/<em>{$value}</em></li>"; 
      } 
     } 
    } 
echo "</ul>"; 

預期HTML輸出

<ul> 
    <li>value1</li> 
    <li>value3</li> 
    <li>value4</li> 
    <li>value5</li> 
</ul> 

電流輸出

<ul> 
    <li>1</li> 
    <li>1</li> 
    <li>value1</li> 
    <li>value1</li> 
    <li>value3</li> 
    <li>value3</li> 
    <li>value4</li> 
    <li>value4</li> 
    <li>value5</li> 
    <li>value5</li> 
</ul> 

當前問題

正如你所看到的,我現在有雙重的一切,對於一些奇怪的原因,我得到了行ID,還是讓我承擔考慮到我向數據庫添加新行時沒有第二行。

備用碼

使用註釋行,我得到這樣的輸出:

<ul> 
    <li>0/1</li> 
    <li>id/1</li> 
    <li>1/value1</li> 
    <li>field1/value1</li> 
    <li>3/value3</li> 
    <li>field3/value3</li> 
    <li>4/value4</li> 
    <li>field4/value4</li> 
    <li>5/value5</li> 
    <li>field5/value5</li> 
</ul> 

據我瞭解

  • 一個while循環,讓我經歷數據庫中的每一行。
  • A foreach循環與while循環類似,但它不通過數據庫條目,而是經過array中的鍵/值對。

(請隨時糾正我,如果我錯了,這些以前的陳述。)

念Wo思考

  • 我開始懷疑,因爲我寫這篇文章問題,如果whileforeach似乎有點多餘,因爲兩者似乎都會解析這些值,可能會導致我的副本......?
  • 是不是行號(在這種情況下是1)是一個關鍵?
+0

也許是因爲$ q是設置爲mysqli_query,並在此期間設置?也許試試'while($ r = mysqli_fetch_array($ q))'? –

+0

這產生相同的結果,即兩倍相同的輸出 – davewoodhall

回答

6

默認情況下,mysqli_fetch_array()同時返回關聯數組($key => $value)和一個數值數組(0 => value),這就是爲什麼你得到重複 - 一些條目有列名作爲重點,該有的都有了一個數字索引。

如果你想要一個關聯數組,你可以使用:

mysqli_fetch_array($q, MYSQLI_ASSOC); 
//or 
mysqli_fetch_assoc($q); 

或者一個數字數組:

mysqli_fetch_array($q, MYSQLI_NUM); 
//or 
mysqli_fetch_row($q); 

欲瞭解更多信息:http://www.php.net/manual/en/mysqli-result.fetch-array.php

+3

優秀的捕獲 – Zarathuztra