【问题标题】:mysqli_fetch_array() foreach loop duplicatesmysqli_fetch_array() foreach 循环重复
【发布时间】:2014-01-06 02:39:51
【问题描述】:

我正在对返回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 循环允许我遍历数据库中的每一行。
  • foreach 循环类似于while 循环,但它不是通过数据库条目,而是通过来自array 的键/值对。

(如果我对之前的陈述有误,请随时纠正我。)

大声思考

  • 我开始怀疑,当我写这个问题时,whileforeach 似乎有点多余,因为它们似乎都会解析这些值,可能导致我的重复...?
  • 行号(在本例中为1)不是键吗?

【问题讨论】:

  • 可能是因为 $q 被设置为 mysqli_query 并且在此期间也被设置了?也许试试while($r = mysqli_fetch_array($q))
  • 这会产生相同的结果,即两倍的输出

标签: php mysql sql arrays foreach


【解决方案1】:

默认情况下,mysqli_fetch_array() 同时返回关联数组 ($key =&gt; $value) 和数值数组 (0 =&gt; 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

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2021-12-20
    • 2012-09-21
    相关资源
    最近更新 更多