【问题标题】:this foreach loop returns double the results这个 foreach 循环返回双倍的结果
【发布时间】:2013-12-15 01:37:32
【问题描述】:

我正在尝试运行一个脚本来获取特定组的成员 ID。 当我使用 foreach 循环时,它会返回每个结果两次,有时会错过数据库中的最后一个结果。

这是我的代码:

    <?php
    include_once("scripts/checkuserlog.php");
    $squadid = "";
    if (isset($_GET['pid'])){ $squadid = $_GET['pid'];};

    $sqlName = "SELECT mem_id FROM team_members WHERE team_id='$squadid' AND is_member='1'" or die ("Sorry we had a mysql error!");
    $queryName = mysqli_query($db_conx, $sqlName);
    while($array = mysqli_fetch_array($queryName)){
        foreach($array as $value){
            echo "$value<br/>";
        } 
    }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>
    </head>
    <body>
    </body>
    </html>

抛出的结果如下所示:

3
3
2
2
1
1
4
4
5
5

显然每个数字应该只有一个,因为每个成员只能加入每个组一次。

在没有 100% 确定它们的工作之前,我从未真正使用过 foreach 循环,我对语法进行了一些研究,但无法找出我哪里出错了。我只能假设我打了两次电话,但不确定在哪里。

如果有人知道除了 foreach 循环之外还有更好的方法来实现我需要的东西,我会全力以赴

谢谢

【问题讨论】:

  • 这可能是关联返回的。这意味着它将返回与命名索引配对的键索引结果。它适用于想要立即使用结果偏移量以及命名绑定的懒人。如有疑问,请务必阅读文档; us2.php.net/mysqli_fetch_assoc

标签: php arrays loops foreach


【解决方案1】:

答案很简单。这是因为获取了两种结果:

  1. 关联数组,例如数组[“键”]
  2. 索引数组,例如数组[0]

如果你想要关联数组,请使用mysqli_fetch_assoc

如果需要索引数组,请使用 mysqli_fetch_row

【讨论】:

    【解决方案2】:

    尝试使用 mysqli_fetch_assoc,msqli_fetch_array 返回数字键和字符串。

    <?php
    include_once("scripts/checkuserlog.php");
    $squadid = "";
    if (isset($_GET['pid'])){ $squadid = $_GET['pid'];};
    
    $sqlName = "SELECT mem_id FROM team_members WHERE team_id='$squadid' AND is_member='1'" or die ("Sorry we had a mysql error!");
    $queryName = mysqli_query($db_conx, $sqlName);
    while($array = mysqli_fetch_assoc($queryName)){
        foreach($array as $value){
            echo "$value<br/>";
        } 
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      如果您阅读mysqli_fetch_array 上的文档,您会看到默认结果类型是MYSQLI_BOTH。这意味着每个值在数组中出现两次。一个带有数字索引,另一个带有字符串列名。

      foreach 简单地遍历数组中的所有元素;这包括数字和字符串版本,这就是它出现两次的原因。

      如果您只获取每行的单个值,则无论如何都不应该进行 foreach-ing。

      使用 mysqli,我相信您想使用 fetch row,然后使用 $array[0] 获取数组的第一个也是唯一的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-10
        • 2013-05-19
        • 1970-01-01
        • 2014-10-26
        • 2021-09-24
        • 2020-05-06
        • 1970-01-01
        • 2014-05-27
        相关资源
        最近更新 更多