这个foreach循环返回结果的两倍

时间:2013-11-28 22:54:43

标签: php arrays loops foreach

我正在尝试运行脚本来获取特定组的成员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

显然每个号码只应该有一个,因为每个成员只能加入一个组。

我从来没有真正使用过foreach循环,然后我们对它们的工作没有100%肯定,我已经对语法做了一些研究但是无法解决我出错的地方。我只能假设我在两次打电话但不确定在哪里。

如果有人知道一个更好的方法来实现我需要的东西而不是foreach循环我都是耳朵

感谢

3 个答案:

答案 0 :(得分:7)

尝试使用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/>";
    } 
}
?>

答案 1 :(得分:4)

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

  1. 关联数组,例如array [“key”]
  2. 索引数组,例如阵列[0]
  3. 如果需要关联数组

    ,请使用mysqli_fetch_assoc

    如果您想要索引数组

    ,请使用mysqli_fetch_row

答案 2 :(得分:0)

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

foreach只是迭代数组中的所有元素;这包括数字和字符串版本,这就是它出现两次的原因。

如果你只是每行提取一个值,那么你不应该预先做好准备。

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