我在数据库上执行请求,返回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思考
- 我开始怀疑,因为我写这篇文章问题,如果
while
和foreach
似乎有点多余,因为两者似乎都会解析这些值,可能会导致我的副本......? - 是不是行号(在这种情况下是
1
)是一个关键?
也许是因为$ q是设置为mysqli_query,并在此期间设置?也许试试'while($ r = mysqli_fetch_array($ q))'? –
这产生相同的结果,即两倍相同的输出 – davewoodhall