2013-12-18 102 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